Ich möchte eine benutzerdefinierte Suche in der Aktionsleiste anzeigen (ich verwende dafür ActionBarSherlock).
Ich habe das verstanden:
Ich möchte jedoch ein benutzerdefiniertes Layout (Feld edittext) erstellen, das die gesamte verfügbare Breite einnimmt.
Ich habe ein benutzerdefiniertes Layout implementiert, wie hier vorgeschlagen .
Es gibt mein benutzerdefiniertes Layout search.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="?attr/actionButtonStyle"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_horizontal"
android:focusable="true" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|fill_horizontal" >
<EditText
android:id="@+id/search_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|center"
android:background="@drawable/bg_search_edit_text"
android:imeOptions="actionSearch"
android:inputType="text" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:src="@drawable/ic_search_arrow" />
</FrameLayout>
</LinearLayout>
Und in MyActivity
:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setIcon(R.drawable.ic_action_search);
LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.search, null);
actionBar.setCustomView(v);
Wie kann ich ein benutzerdefiniertes Layout erstellen, um die gesamte verfügbare Breite von zu belegen actionBar
?
Hilfe bitte.
Antworten:
Dafür gibt es einen Trick. Alles, was Sie tun müssen, ist,
RelativeLayout
anstattLinearLayout
als Hauptcontainer zu verwenden. Es ist wichtig, sich daraufandroid:layout_gravity="fill_horizontal"
eingestellt zu haben. Das sollte es tun.quelle
Ich kämpfte selbst damit und versuchte es mit Tomiks Antwort. Dadurch wurde das Layout jedoch beim Start nicht auf die volle verfügbare Breite gebracht, nur wenn Sie der Ansicht etwas hinzufügen.
Sie müssen Folgendes festlegen,
LayoutParams.FILL_PARENT
wenn Sie die Ansicht hinzufügen:Auf diese Weise wird der verfügbare Platz vollständig ausgefüllt. (Möglicherweise müssen Sie auch die Tomik-Lösung verwenden.)
quelle
So hat es bei mir funktioniert (von den obigen Antworten wurden sowohl der Standardtitel als auch meine benutzerdefinierte Ansicht angezeigt).
Was mir aufgefallen ist, dass beide
setCustomView(view)
undsetCustomView(view,params)
die Ansichtsbreite = übereinstimmen / füllen übergeordnet. setDisplayShowCustomEnabled (boolescher showCustom)quelle
Die Antworten von Tomik und Peterdk funktionieren, wenn Ihre benutzerdefinierte Ansicht die gesamte Aktionsleiste einnehmen und sogar den nativen Titel ausblenden soll .
Wenn Sie jedoch möchten, dass Ihre benutzerdefinierte Ansicht neben dem Titel angezeigt wird (und den gesamten verbleibenden Platz ausfüllt, nachdem der Titel angezeigt wurde), verweise ich Sie hier auf die hervorragende Antwort des Benutzers Android-Developer:
https://stackoverflow.com/a/16517395/614880
Sein Code unten funktionierte perfekt für mich.
quelle
Sie können beispielsweise eine Layoutdatei definieren, die ein EditText-Element enthält.
du kannst tun
quelle
Es gibt ein Beispiel in der Launcher-App von Android (aus der ich hier eine Bibliothek erstellt habe) in der Klasse, die sich mit dem Auswählen von Hintergrundbildern befasst ("WallpaperPickerActivity").
Das Beispiel zeigt, dass Sie ein benutzerdefiniertes Thema festlegen müssen, damit dies funktioniert. Leider funktionierte dies bei mir nur mit dem normalen Framework und nicht mit dem der Support-Bibliothek.
Hier sind die Themen:
styles.xml
value-v19 / styles.xml
BEARBEITEN: Es gibt einen besseren Weg, der auch in der Support-Bibliothek funktioniert. Fügen Sie einfach diese Codezeile anstelle der oben beschriebenen hinzu:
quelle