如何在AndroidAnnotations中使用自定义操作栏布局?
有效的代码:
@EActivity(R.layout.activity_register_classes)
public class RegisterClassesActivity extends ActionBarActivity {
@AfterViews
void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setCustomView(R.layout.fragment_save_cancel_action_bar);
findViewById(R.id.id_cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(), "Cancelando...", Toast.LENGTH_SHORT).show();
}
});
}
}
但以下代码段不是:
@EActivity(R.layout.activity_register_classes)
public class RegisterClassesActivity extends ActionBarActivity {
@AfterViews
void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setCustomView(R.layout.fragment_save_cancel_action_bar);
}
@Click(R.id.id_save)
void cancel() {
Toast.makeText(getBaseContext(), "Cancel...", Toast.LENGTH_SHORT).show();
}
}
我正在使用该库的3.0.1版本。 Android API 19
答案 0 :(得分:1)
我认为这个问题有一段时间了,我希望现在能够提供帮助。所以我遇到这个问题也导致Android Annotations文件很差。实际上我必须解决这个问题两次,因为我的第一个解决方案在第一次使用时没有用,我将在代码中解释这个。
1.-第一个是创建一个菜单,你必须在res / menu里面进行操作,让它命名为" myactivity_menu.xml"它应该看起来像这样(它应该在创建Activity时默认创建):
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MyActivity">
<item android:id="@+id/thisIsAnId"
android:icon="@drawable/your_drawable"
android:title="@string/your_string"
app:showAsAction="always"/> />
</menu>
此代码中的重要一点是给它一个id(你将需要它),如果你想拥有一个好看的图标,就像任何其他资产一样将图标上传到你的drawable文件夹(不确定,但我认为string是可选的。)
2.-现在转到您的活动并使用AndroidAnnotations以这种方式调用菜单:
@EActivity(R.layout.my_activity)
@OptionsMenu(R.menu.myactivity_menu)
就是这么简单只需在@EActivity下添加@OptionsMenu就可以了,现在你的菜单应该可见了。
然而,这里有一个很好的观点,那么如何使用菜单中的按钮或图标做些什么呢?是一个非常好的问题导致AndroidAnnotations doc不清楚这个,例子非常差,可能会引起你的困惑。所以这就是我们要做的事情:
3.-这里我们要为菜单项设置一个查找器:
@OptionsItem(R.id.thisIsAnId)
void whatEverToDoWithMyMenuItem() {
}
下面需要一个void方法,我认为这是AndroidAnnotations doc中唯一适当的指示。
此代码可以放在@AfterViews下。
然而,这个还不清楚,导致AndroidAnnotation改变Android逻辑派生自onItem ......那么如果我必须设置一个监听器会发生什么呢?
我的错误是在我们刚刚创建的void方法中使用普通的Android逻辑。这不会很好。
4.-所以在这一点上我们必须简单地添加我们想要做的事情,因为我们已经有了听众:
@OptionsItem(R.id.thisIsAnId)
void whatEverToDoWithMyMenuItem() {
Toast toast = Toast.makeText(getApplicationContext(), "Sample Text",
Toast.LENGTH_LONG);
toast.show();
}
这里的诀窍是当我们@OptionsItem(R.id.thisIsAnId)
时,已经设置了点击的监听器,所以我们可以在下面的void方法中做任何我们想做的事。
如果由于某种原因你在voide方法中使用了一个警告并得到一个错误请看到这个问题,我使用this
修复了我的
如果AndroidAnnotations中的任何人正在阅读此内容,请改进您的文档。