Ich beabsichtige, meiner Android-Anwendung eine Chrome-ähnliche Funktionalität hinzuzufügen (siehe Pfeil im Screenshot unten), wo eine Nummer im Aktionsleistenmenü mit einem Rahmen um sie herum angezeigt würde. Wie kann ich das machen?Wie wird der Rahmen um den Text in der Android-Aktionsleiste angezeigt?
1
A
Antwort
2
Beginnen wir mit dem Kastenrahmen beginnen:
/res/drawable/count_frame.xml
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="2dp">
<shape
android:shape="rectangle">
<corners android:radius="2dp"/>
<solid android:color="@android:color/transparent"/>
<stroke
android:width="2dp"
android:color="#FF404040"/>
</shape>
</inset>
Das count_frame
Box um einen TextView
gehen wird:
/res/layout/menu_action_count_view.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="12dp"
android:background="@drawable/count_frame"
android:gravity="center"
android:textColor="#FF000000"
android:textSize="13sp"
android:textStyle="bold"
tools:text="4"/>
Diese TextView
wird eine Aktionsansicht für Ihren Menüeintrag sein. (Mit Hilfe der app:
Namespace, da ich Sie gehe davon verwenden AppCompatActivity
):
/res/menu/menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_result_view"
android:title="@string/count"
app:actionLayout="@layout/menu_action_count_view"
app:showAsAction="always"/>
</menu>
Jetzt in Ihrem onCreateOptionsMenu
überschreiben, erhalten Sie die Aktion Blick und richtete ihn auf. Nehmen wir an, Ihre Zählung in private int mCount;
ist
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
TextView count = (TextView) menu.findItem(R.id.action_result_view).getActionView();
count.setText(Integer.toString(mCount)); // so the int isn't mistaken for a resource id!
count.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do your action here
}
});
return true;
}
Wenn die Zählung ändert, supportInvalidateOptionsMenu()
nennen.
Im Fall wollte man das Überlaufmenü auf dem Hahn dieses umrandeten Textview zeigen, verwenden Sie den folgenden Code in onCreateOptionsMenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
final Menu m = menu;
final MenuItem item = menu.findItem((R.id.action_result_view));
TextView count = (TextView) menu.findItem(R.id.action_result_view).getActionView();
count.setText(Integer.toString(mCount)); // so the int isn't mistaken for a resource id!
count.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
m.performIdentifierAction(item.getItemId(), 0);
}
});
return true;
}
Die Veränderungen arbeiten. Aber ich stehe vor einem Problem. Der Menüpunkt ist nicht mehr anklickbar. Außerdem verwende ich AppCompatActivity nicht. –
Ich möchte ein Überlaufmenü anzeigen, wenn ich auf diese umrandete Textansicht tippe. –
Ich könnte das Problem beheben und ich habe Ihre Lösung aktualisiert. Danke vielmals. –