以编程方式从标题栏更改可见性按钮?
问题描述:
我有一个问题按钮的可见性。我有2个来自标题栏的按钮。其中一个编辑,其中一个完成。首先,我想看到只是编辑按钮,当我点击编辑按钮,编辑按钮的可见性将是错误的,并完成按钮可见性真实。以编程方式从标题栏更改可见性按钮?
我从XML获得他们的ID,当我点击其中一个我想改变可见性,但edit.setVisibility();它不工作。怎么了?我可以看到编辑按钮。我想以编程方式更改按钮的可见性。
任何人都可以有任何想法吗?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final boolean customTitle = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
edit=(Button)findViewById(R.id.edit);
done=(Button)findViewById(R.id.done);
edit.setVisibility(View.INVISIBLE);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.main);
if (customTitle) {
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.main);
}
的main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/edit"
android:layout_width="57px"
android:layout_height="wrap_content"
android:text="edit"/>
<Button android:id="@+id/done"
android:layout_width="57px"
android:layout_height="wrap_content"
android:text="done"/>
</LinearLayout>
答
首先,你错过了android:在你的LinearLayout定向参数。
第二,如果你想与编辑之间的变化做,你可以这样做:
edit.setVisibility(View.GONE);
done.setVisibiluty(View.VISIBLE);
和对面来改变重新编辑按钮。随着View.INVISIBLE按钮不会显示,但仍使用它的位置。
答
问题是setFeatureInt
只是设置标题的资源ID,这将导致布局资源的新的膨胀,它将被放置在称为id/title_container
的系统FrameLayout
中。这可以使用eclipse中的Hierarchy Viewer进行检查。
本质上,你最终得到两个主布局的实例。一组作为内容视图(标题下方),另一组作为标题。当您致电findViewById
时,它只会在内容视图中查看与该ID匹配的任何视图。这意味着您检索的edit
和done
按钮是内容视图中的按钮。
如果您要访问的标题区域中的按钮,你可以使用
View v = getWindow().getDecorView();
edit=(Button)v.findViewById(R.id.edit);
done=(Button)v.findViewById(R.id.done);
edit.setVisibility(View.INVISIBLE);
这将通过这个窗口,而不仅仅是内容画面的整体视图结构进行搜索,从而解决您的问题。
请对这种行为使用操作栏。操作栏在Android 3.0+上是原生的,并且有多种库用于在较早版本的Android上提供操作栏(例如,ActionBarSherlock)。 – CommonsWare 2011-12-14 14:00:27