好问题!我想知道同样的在布局编辑器中进行一个很好的预览真的很困难,并且似乎很少有关于“isineditmode”是真的可以做什么的文档,例如,在构造函数中的传入AttributeSet中分析自定义的XML属性的意见似乎不起作用等).
我甚至在自定义视图中通过ID查找视图的问题.一个简单的事情像
mTextView = (TextView)myLayout.findViewById(R.id.view_id);
膨胀后,我的自定义视图布局只有在从编辑器运行布局(即isineditmode()== true)时才返回null.当在手机上运行应用程序时,它可以工作.
我在这里离开你在布局编辑器中尝试更好地预览我的布局时帮助我的东西:
1-查找视图:我使用TAG属性,因为findViewWithTag()函数在编辑模式下工作.所以我使用标识的标识
android:id="@+id/myTextViewId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
android:tag="mytextViewId" />
然后使用标签查找视图:
if(isineditmode()){
((TextView)myLayout.findViewWithTag("myTextViewId")).setText("Test text");
}
2-检查一些值以了解为什么有时候我的自定义视图无法在编辑模式下实例化,或者检查一些策略是否可以在编辑模式下查询并知道其价值.我在我的自定义视图放置的父布局中使用了一个特殊的文本视图,并将其隐藏并使用了一个特殊的标签:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
...
...
android:id="@+id/DebugView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="debug"
android:textSize="16sp"
android:textColor="#FFFFFF"
android:visibility="gone"
/>
此线性布局将是我的自定义视图的父项,而我需要在布局编辑器中打开以预览我的自定义视图. “调试”textview的可见性是“走了”,所以如果不需要,我不会打扰.
然后,当我需要检查我在自定义视图的java代码中执行以下操作时:
if(isineditmode()){
TextView wDebugView = (TextView)this.getRootView().findViewWithTag("debug");
wDebugView.setVisibility(View.VISIBLE);
wDebugView.setText(Integer.valueOf(getPaddingTop()).toString());
}
在这个例子中,我检查视图的属性,如顶部填充.
重要注意事项:您需要手动将String转换为“debug”视图中显示的值,否则会崩溃并给您一个错误.
希望它有帮助.
如果任何人有一些想法,为什么通过id找到意见不起作用,任何帮助将不胜感激.