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

Android 以编程方式从标题栏更改可见性按钮?,android,visibility,titlebar,Android,Visibility,Titlebar,我的按钮可见性有问题。标题栏上有两个按钮,一个编辑,一个完成。首先,我想看到的只是编辑按钮,当我单击编辑按钮时,编辑按钮的可见性将为false,而完成按钮的可见性为true 我从xml获取它们的id,当我单击其中一个时,我想更改可见性,但编辑.setVisibility;它不工作。怎么了?我可以看到“编辑”按钮。我想通过编程更改buton可见性 有人知道吗 @Override public void onCreate(Bundle savedInstanceState) { super.

我的按钮可见性有问题。标题栏上有两个按钮,一个编辑,一个完成。首先,我想看到的只是编辑按钮,当我单击编辑按钮时,编辑按钮的可见性将为false,而完成按钮的可见性为true

我从xml获取它们的id,当我单击其中一个时,我想更改可见性,但编辑.setVisibility;它不工作。怎么了?我可以看到“编辑”按钮。我想通过编程更改buton可见性

有人知道吗

@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>

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

其次,如果要在“编辑”和“完成”之间进行更改,可以执行以下操作:

edit.setVisibility(View.GONE);
done.setVisibiluty(View.VISIBLE);
相反,再次更改为“编辑”按钮。。不可见时,按钮将不显示,但仍使用其原来的空间。

问题在于setFeatureInt只设置标题的资源ID,这将导致版面资源的新膨胀,该资源将放置在名为ID/title\u容器的系统框架版面中。这可以使用eclipse中的层次结构查看器进行检查

基本上,最终会得到主布局的两个实例。一个设置为标题下方的内容视图,另一个设置为标题。当您调用findViewById时,它将仅在内容视图中查找与ID匹配的任何视图。这意味着您检索的“编辑”和“完成”按钮是内容视图中的按钮

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

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

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

请使用操作栏进行此类操作。action bar是Android 3.0+上的本机操作栏,在Android的早期版本(如ActionBarSherlock)上有各种库提供操作栏。