Sto provando a modificare lo sfondo di ActionBar da un gestore. L'obiettivo finale è quello di passare il Gestore ad un AsyncTask, ma per ora anche chiamare Handler.sendMessage() da un Thread provoca strani comportamenti. Attraverso il debugger sono in grado di vedere che l'Handler riceve il Messaggio e successivamente esegue setActionBarBackground() fino alla fine.ActionBar setBackgroundDrawable() nulling background da Thread/Handler
L'ActionBar predefinito con il tratto di fondo blu scompare completamente dallo schermo e non viene sostituito dal nuovo GradientDrawable. Sospetto che lo sfondo sia in qualche modo annullato. Inoltre, quando mi concentro di nuovo su EditText, viene visualizzato lo sfondo ActionBar GradientDrawable corretto. Il comportamento che mi aspetterei è che lo sfondo cambi semplicemente azioneDone.
Qualsiasi intuizione sul motivo per cui questo sta accadendo sarebbe molto apprezzato!
codice rilevante:
TestActivity.java
public class TestActivity extends RoboSherlockFragmentActivity {
@InjectView(R.id.ET_test) EditText testET;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(MainApp.TAG, "onCreate");
setContentView(R.layout.test_activity);
testET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if (i == EditorInfo.IME_ACTION_DONE) {
String loc = testET.getText().toString();
InputMethodManager mgr = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(testET.getWindowToken(), 0);
Toast.makeText(TestActivity.this, "EditText done!", Toast.LENGTH_SHORT).show();
/*TestQuery tq = new TestQuery(TestActivity.this, mHandler);
tq.execute();*/
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.sendMessage(new Message());
}
}).start();
}
return true;
}
});
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//setActivityColors();
setActionBarBackground();
}
};
private void setActionBarBackground() {
ActionBar ab = getSupportActionBar();
//Drawable d = WidgetUtils.getActionBarDrawable(TestActivity.this, 0xFF00FFFF);
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[]{0xFFFFFFFF, 0xFF000000});
gd.setCornerRadius(0f);
ab.setBackgroundDrawable(gd);
}
}
test_activity.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button"/>
<EditText
android:id="@+id/ET_test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:maxLines="1"
android:lines="1"
android:inputType="number"
android:imeOptions="actionDone"
android:nextFocusUp="@id/ET_test"
android:nextFocusLeft="@id/ET_test"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button2"/>
</LinearLayout>
Questo ha funzionato. Non è necessario un titolo. –
grazie @Mat lavorato per me, ma se avete bisogno di titolo si può solo alterare lo stato del titolo che consente :) – Antarix
Se non si sa se il titolo sta mostrando o meno questo funziona: \t \t \t isDisplayingTitle booleano = (actionBar.getDisplayOptions() & ActionBar.DISPLAY_SHOW_TITLE)! = 0; actionBar.setDisplayShowTitleEnabled (! IsDisplayingTitle); actionBar.setDisplayShowTitleEnabled (isDisplayingTitle); –