以编程方式从标题栏更改可见性按钮?

时间:2011-12-14 09:44:11

标签: android visibility titlebar

我有一个问题按钮可见性。我有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>

2 个答案:

答案 0 :(得分:0)

首先,你在LinearLayout中缺少android:orientation参数。

其次,如果你想在编辑和完成之间进行更改,你可以这样做:

edit.setVisibility(View.GONE);
done.setVisibiluty(View.VISIBLE);

与改为编辑按钮相反。使用View.INVISIBLE按钮不会显示但仍然使用它所在的空间。

答案 1 :(得分:0)

问题是setFeatureInt只是设置了标题的资源ID,这将导致布局资源的新通胀,该资源将放置在名为FrameLayout的系统id/title_container中。这可以使用eclipse中的Hierarchy Viewer进行检查。

基本上,您最终会得到两个主要布局实例。一组设置为内容视图(标题下方),另一组设置为标题。当您致电findViewById时,它只会在内容视图中查找与该ID匹配的任何视图。这意味着您检索的editdone按钮是内容视图中的按钮。

如果要访问标题区域中的按钮,可以使用

    View v = getWindow().getDecorView();
    edit=(Button)v.findViewById(R.id.edit);
    done=(Button)v.findViewById(R.id.done);
    edit.setVisibility(View.INVISIBLE);

这将搜索窗口的整个视图结构,而不仅仅是内容视图,从而解决您的问题。