【问题标题】:Does Android studio layout editor shows custom view properties?Android Studio 布局编辑器是否显示自定义视图属性?
【发布时间】:2015-09-13 08:45:18
【问题描述】:

我有一个由两个按钮和一个文本视图组成的复合视图。我想在 Android Studio 布局编辑器中编辑这些子视图的属性,但我不能。它只显示基本属性,但不显示我的自定义视图的属性。

Android Studio 布局编辑器是否仅显示默认设置的有限数量的属性?是否可以从那里编辑我的自定义视图的属性,而无需手动编辑 XML 文件?

提前致谢!!

【问题讨论】:

标签: java android android-custom-view


【解决方案1】:

http://developer.android.com/training/custom-views/create-view.html#customattr 中所述,您必须添加一个新资源 (res/values/attrs.xml)。

<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>

在您的视图中,您必须引用此新资源

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
     <com.example.customviews.charting.PieChart
         custom:showText="true"
         custom:labelPosition="left" />
</LinearLayout>

现在您应该在编辑器中看到属性。

【讨论】:

  • 感谢您的回答。我尝试了您的解决方案,但不幸的是,自定义属性未显示在 android studio 设计面板中。它对你有用吗?
  • 目前我没有为 Android 开发,但我认为它过去是这样工作的
  • 不幸的是 Android Studio 无法在设计面板中显示自定义属性
  • 此代码在 Android Studio 1.5+ 的编辑器中工作,只要您将其更改为使用标准的“app”命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"(而不是 xmlns:custom)在顶部视图定义中的 XML 和 app:showTextapp:labelPosition。但是,仅编辑器(不是运行时)值的特殊 tools: 覆盖命名空间目前不起作用。 (所有这一切还取决于自定义视图构造函数代码实现并从 context.obtainStyledAttributes 加载这些 XML 属性值,如引用的文档中所述。)
  • 查看这个例子gist.github.com/jon-adams/968a3a7325cae9502873,它为 Volley 的 NetworkImageView 添加了这种支持,它没有从 XML 加载其自定义属性——现在它可以使用这个自定义视图。
【解决方案2】:

改变

xmlns:sidespinner="http://schemas.android.com/tools"

xmlns:sidespinner="http://schemas.android.com/apk/res-auto"

android studio 将显示您自定义视图的自定义属性。

确保您在 res/values/attrs.xml 中定义了自定义属性

【讨论】:

    【解决方案3】:

    如果您使用自定义属性自定义View,则需要使用自己的命名空间来设置自定义属性。

    首先,在布局的根视图中设置命名空间,如下所示:

    xmlns:sidespinner="http://schemas.android.com/apk/res-auto"
    

    由于自定义属性名称在您当前项目或库项目的res/values/attrs.xml 中声明,命名空间sidespinner 将告诉aapt 从您当前项目或库项目中获取属性。

    第二,在你的自定义View中设置自定义属性如下:

    <your-custom-view
         sidespinner:boolean-attr="true"
         sidespinner:integer-attr="5"
         sidespinner:enum-attr="none"//your enum values
         sidespinner:dimen-attr="10dp" />
    

    我希望你清楚这一点。如果您想知道如何自定义属性,请参考@SteffenTimm 的回答。

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多