我有一个问题按钮可见性。我有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>
答案 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匹配的任何视图。这意味着您检索的edit
和done
按钮是内容视图中的按钮。
如果要访问标题区域中的按钮,可以使用
View v = getWindow().getDecorView();
edit=(Button)v.findViewById(R.id.edit);
done=(Button)v.findViewById(R.id.done);
edit.setVisibility(View.INVISIBLE);
这将搜索窗口的整个视图结构,而不仅仅是内容视图,从而解决您的问题。