ITu*_*nko 30 android android-menu
我无法理解为什么错误和不兼容(AndroidStudio告诉我"应该使用app:showAsAction与appcompat库)代码
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/search"
android:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)
工作完美,但适当和兼容的版本
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/search"
app:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)
根本没有显示我的图标.
我正在测试Samsung GT P5210(android v.4.4.2)和Nexus 7(4.4.4)
mar*_*812 56
当你想使用操作栏时,你应该经常检查的事情是
1)延伸ActionBarActivity而不是Activity
public class MainMenu extends ActionBarActivity{
2)根据清单中的定义选择正确的样式
表现
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
Run Code Online (Sandbox Code Playgroud)
样式
<style name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
</style>
Run Code Online (Sandbox Code Playgroud)
3)选择合适的标题为showAsAction
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:**yourapp**="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
**yourapp**:showAsAction="ifRoom" />
...
</menu>
Run Code Online (Sandbox Code Playgroud)
这是大多数人都错了
4)定义你Menu的Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
如果您执行以下所有操作,则应该可以使用操作栏.
然后你应该onClickListener为每个位置添加...
bla*_*izz 16
我只是重新阅读你的问题,看到你的问题完全相反(但我的旧答案的一些部分仍然适用于你的问题),所以这里是更新的答案:
您已经在gradle文件中导入了appcompat库,但您似乎只支持比Level Level 11或14更新的设备?如果是这种情况,lint检查会发现您已经通过gradle导入了appcompat库,它认为您应该使用ActionBarActivity因为您的库导入.这就是你得到错误的原因.但是,当您的android:showAsAction属性正常工作时,您使用本机Activity和本机属性调用是正确的,即使lint检查说它是错误的.所以,如果你想去除棉绒的错误,你必须从你的gradle这个文件中删除程序兼容性lib和可能改变你的活动主题,以原生Holo浅色主题,为您的当前主题可能依靠程序兼容性主题.
它不使用app命名空间的答案是在本机分别为库代码的XML属性加载中,这在旧答案中处理.
如果您使用ActionBarActivity支持库中的设备来访问低于API级别11的设备,那么这里的主要问题是,ActionBarActivity重新创建一些本机Android XML属性,例如android:showAsAction在您自己的范围内,您可以使用以下内容定义:
xmlns:app="http://schemas.android.com/apk/res-auto"
Run Code Online (Sandbox Code Playgroud)
然后showAsAction在app:命名空间中使用相同的属性(此处)访问它们.因此,ActionBarActivity无法查看或访问本机android:showAsAction属性,因为它只在app命名空间而不是android命名空间中查找它.
如果要使用本机属性,则必须使用Activity具有Holo主题的本机,仅支持API Level 11及更高版本.
补充一下:
yourapp:showAsAction="ifRoom"
Run Code Online (Sandbox Code Playgroud)
或者
android:showAsAction
Run Code Online (Sandbox Code Playgroud)
例如:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
yourapp:showAsAction="ifRoom" />
</menu>
Run Code Online (Sandbox Code Playgroud)
并在活动中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
return true;
case R.id.action_compose:
composeMessage();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多
| 归档时间: |
|
| 查看次数: |
49986 次 |
| 最近记录: |