AppCompatActivity 自定义 ActionBar 按钮不显示 Android 4.1.2
AppCompatActivity custom ActionBar buttons do not appear on Android 4.1.2
它在 5.1 上运行良好,但在 4.1.2 上运行不正常
我错过了什么?
这里是 activity xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myApp="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/transfer"
android:title="@string/transfer"
android:icon="@drawable/ic_transfer"
myApp:showAsAction="always" />
<item android:id="@+id/refresh"
android:title="@string/refresh"
android:icon="@drawable/ic_refresh"
myApp:showAsAction="always" />
<item android:id="@+id/about"
android:title="@string/about"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="100"
myApp:showAsAction="never" />
<item android:id="@+id/help"
android:title="@string/title_activity_help"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="101"
myApp:showAsAction="never" />
<item android:id="@+id/settings"
android:title="@string/settings"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="102"
myApp:showAsAction="never" />
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="103"
myApp:showAsAction="never" />
<item android:id="@+id/logout"
android:title="@string/logout"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="104"
myApp:showAsAction="never" />
</menu>
这是我的 activity class( 扩展了另一个扩展 AppCompatActivity 的 activity):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_activity, menu);
return true;
}
我正在使用以下 appcompat 库:
'com.android.support:appcompat-v7:22.2.0'
您应该改用工具栏。
将此放入您的 XML:
<android.support.v7.widget.Toolbar
android:id="@id/toolbar"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary" />
此代码进入您的 activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(getTitle());
}
}
比起你只是膨胀你的菜单:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
感谢您的回复。我按照这两个答案的建议做了:
How to force use of overflow menu on devices with menu button
Actionbar not shown with AppCompat
总结解决方案:
- 我在 activity xml 中将 "myApp" 更改为 "compat"(修复了丢失的按钮)
我添加了这段代码
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ex) {
// Ignore
}
到我的基础 activity(每隔一个 activity 扩展)扩展 AppCompatActivity(修复了丢失的菜单)
现在它在 5.1 和 4.1.2 中都有效
它在 5.1 上运行良好,但在 4.1.2 上运行不正常
我错过了什么?
这里是 activity xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myApp="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/transfer"
android:title="@string/transfer"
android:icon="@drawable/ic_transfer"
myApp:showAsAction="always" />
<item android:id="@+id/refresh"
android:title="@string/refresh"
android:icon="@drawable/ic_refresh"
myApp:showAsAction="always" />
<item android:id="@+id/about"
android:title="@string/about"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="100"
myApp:showAsAction="never" />
<item android:id="@+id/help"
android:title="@string/title_activity_help"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="101"
myApp:showAsAction="never" />
<item android:id="@+id/settings"
android:title="@string/settings"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="102"
myApp:showAsAction="never" />
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="103"
myApp:showAsAction="never" />
<item android:id="@+id/logout"
android:title="@string/logout"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="104"
myApp:showAsAction="never" />
</menu>
这是我的 activity class( 扩展了另一个扩展 AppCompatActivity 的 activity):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_activity, menu);
return true;
}
我正在使用以下 appcompat 库:
'com.android.support:appcompat-v7:22.2.0'
您应该改用工具栏。
将此放入您的 XML:
<android.support.v7.widget.Toolbar
android:id="@id/toolbar"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary" />
此代码进入您的 activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(getTitle());
}
}
比起你只是膨胀你的菜单:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
感谢您的回复。我按照这两个答案的建议做了:
How to force use of overflow menu on devices with menu button
Actionbar not shown with AppCompat
总结解决方案:
- 我在 activity xml 中将 "myApp" 更改为 "compat"(修复了丢失的按钮)
我添加了这段代码
try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if(menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception ex) { // Ignore }
到我的基础 activity(每隔一个 activity 扩展)扩展 AppCompatActivity(修复了丢失的菜单)
现在它在 5.1 和 4.1.2 中都有效