android - 如何在 ADT 的图形布局编辑器中调试自定义 View

标签 android eclipse android-layout adt android-custom-view

如何使用 ADT Eclipse 插件在布局 XML 的图形预览中调试自定义 View ?


我写了一个自定义 View ,把它放在布局 XML 中,我可以在 ADT Graphical Layout Editor 中预览它.我可以像 Google 人员在 Google I/O 2011: Android Development Tools 中所做的那样查看我的自定义 View .但是,我的自定义 View 在预览中表现错误(在模拟器/设备上没有问题,但我没有使用 View.isInEditMode() )。我认为变量的值有误,但我无法确认。我试过:

最佳答案

好问题!我也想知道。在布局编辑器中进行良好的预览真的非常困难,而且当“isineditmode”为真时,关于你能做什么和不能做什么的文档似乎很少(例如,在构造函数的传入 AttributeSet 中分析自定义 XML 属性的意见似乎不工作,等等,等等)。

我什至无法在自定义 View 中按 ID 查找 View 。一个简单的事情,比如

mTextView = (TextView)myLayout.findViewById(R.id.view_id);

只有在从编辑器运行布局时(即 isineditmode() == true),我的自定义 View 布局才会膨胀后返回 null。在手机上运行该应用程序时它可以正常工作。

当我试图在布局编辑器中更好地预览我的布局时,我把你留在这里:

1- 查找 View :我使用 TAG 属性,因为 findViewWithTag() 函数在编辑模式下确实有效。所以我使用 Id 作为 TAG

<TextView
    android:id="@+id/myTextViewId"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...
    android:tag="mytextViewId" />

然后使用标签查找 View :

if(isineditmode()){
    ((TextView)myLayout.findViewWithTag("myTextViewId")).setText("Test text");
}

2- 检查一些值以了解为什么有时我的自定义 View 无法在编辑模式下实例化,或者检查某些属性是否可以在编辑模式下查询并知道它们的值。我在将放置我的自定义 View 的父布局中使用特殊的 TextView ,并将其隐藏并带有特殊标记:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > 

    ...

    <com.example.myCustomView ... />

    ...

    <TextView
        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"
     />

</LinearLayout>

此线性布局将是我的自定义 View 的父 View ,并且我需要在布局编辑器中打开它才能预览我的自定义 View 。 “调试” TextView 可见性已“消失”,因此如果不需要我不会打扰。 然后,当我需要检查某些内容时,我在自定义 View 的 Java 代码中执行以下操作:

if(isineditmode()){
    TextView wDebugView = (TextView)this.getRootView().findViewWithTag("debug");
    wDebugView.setVisibility(View.VISIBLE);
    wDebugView.setText(Integer.valueOf(getPaddingTop()).toString());
}

在这个例子中,我检查了 View 的一个属性,比如顶部填充。

重要说明:您需要手动将值转换为字符串以显示在“调试” View 中,否则它会崩溃并给您一个错误。

希望对您有所帮助。

如果有人知道为什么无法通过 ID 查找 View ,我们将不胜感激。

关于android - 如何在 ADT 的图形布局编辑器中调试自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168343/

相关文章:

java - Android - 显示空 ListView 的警报对话框

java - 谷歌地图 API Android 崩溃

java - 如何让 Eclipse 使用 JDK8 编译项目?

java - 如何在 Java (Eclipse) 文件中保存/显示神经网络的图形表示?

java - 如何使用 eclipse 传递 unicode VM 参数?

android - 在android中的对话框中设置多个文本框

android - Flexboxlayout 项目之间的间距以编程方式

android - IO异常 : AsyncTask Image Download Kotlin Android (Bad File Descriptor)

java - 通过GSON处理同名的多个属性

java - 为什么在某些事件中调用 getLayoutParams() 会抛出异常?例如,onSaveInstanceState