【问题标题】:access static class fields in android layout.xml访问 android layout.xml 中的静态类字段
【发布时间】:2016-08-18 09:59:11
【问题描述】:

我的 android 项目中有 Constants java 类,我想创建一个 layout.xml。

在 xml 文件中,我想访问我的 Constants 类中的 public static final 字段。

我该怎么做?

layout.xml

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=Constants.HelloMessage/>

常量.java

public class Constants {
    public static final String HelloMessage = "Hello Dear Users";
}

【问题讨论】:

  • 首先:您的值文件夹中有一个strings.xml。这正是你想要的。第二:您不能从 XML 访问代码变量。您必须在活动初始​​化时手动设置它们,最好在 onCreate-Method 中设置。
  • @ManuToMatic 你是在建议我将所有常量从 Constants.java 类移动到 strings.xml 吗?
  • @Oleg ...或在活动中以编程方式分配它们。

标签: java android xml


【解决方案1】:

管理 Android 字符串资源的正确方法是使用 res/values 文件夹中的 string.xml file

但是,如果需要,您也可以通过编程方式设置 UI 小部件的文本。这通常用于动态文本,但没有什么可以阻止您继续在您的常量类中使用静态 Strings。

ActivityFragment 中膨胀包含例如您上面的RadioButton 的布局,您需要获取对它的引用,然后设置文本。要获得参考,您首先需要在 XML 中为 RadioButton 提供一个 id:

<RadioButton
    android:id="@+id/radio_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

然后使用常量字符串以编程方式设置文本:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RadioButton radioButton = (RadioButton) findViewById(R.id.radio_button);
    radioButton.setText(Constants.HelloMessage);
}

关于风格的说明,你的字符串变量应该是camel case,所以应该是helloMessage

【讨论】:

    【解决方案2】:

    将您的 xml 更改为以下内容

    <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:id="@+id/radBtnId"
    />
    

    在你的 java 类中,

    RadioButton radBtn=(RadioButton)findViewById(R.id.radBtnId);
    radBtn.setText(Constants.HelloMessage);
    

    或者你可以在strings.xml中提到String,就像直接在xml文件中引用

     <string name="tag">Name</string>
    

    【讨论】:

      【解决方案3】:

      为此目的使用strings.xml。你的做法是错误的。

      转到 res 文件夹,然后转到 values>strings.xml。打开它并将你的字符串放在那里

      <resources>
          <string name="hello_message">Hello Dear Users</string>
      <resources>
      

      然后在你的布局中

      <RadioButton
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text=@string/hello_message/>
      

      希望这会有所帮助。

      【讨论】:

      • 如果我有 ints 或 floats 常量,它们是否也应该放在 strings.xml 中?听起来有点不对
      • 在 strings.xml 中您只定义字符串。而android:text 只接受字符串而不是 int 或 floats
      • 但是每个数字都可以表示为字符串@ZeeshanShabbir。例如,您可以使用值11 定义一个字符串。
      • 那么我应该如何调用 ressource.xml 文件来存储我的数字常量?
      • developer.android.com/guide/topics/resources/…也许你可以看看这个关于如何定义整数
      猜你喜欢
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多