设置嵌套TextView文本

时间:2015-12-27 18:15:16

标签: java android xml textview

我为多次使用的按钮格式创建了一个布局。按钮格式有TextView和ImageView。通过我在主要活动中包含此布局的方式,我认为我无法在Java或XML中动态更改内部TextView的文本。我可以采用不同的方式来设置内部TextView的文本吗?

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/settingslayout">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="25dp"
    android:layout_marginTop="13dp"
    android:textSize="20dp"
    android:text="CHANGE ME"
    android:id="@+id/text" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="12dp"
    android:layout_marginRight="25dp"
    android:layout_alignParentRight="true"
    android:src="@drawable/left"
    android:adjustViewBounds="true"
    android:scaleType="centerCrop"
    android:maxHeight="30dp"
    android:maxWidth="30dp"/>
</RelativeLayout>

主要活动:

...
<include layout="@layout/settings_layout"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/accountStaticUnderline"
    android:id="@+id/termBegin"
    android:text="TEST" /> //DOESNT WORK
...
</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

当然,只需在您的活动中输入此代码

即可
((TextView)findViewById(R.id.text)).setText("enter_text_here");

答案 1 :(得分:1)

设置该方式的文字无效,因为android:text不适用于<include>标记。更具体地说,它不适用于被包含的东西,即RelativeLayout。 (您无法将android:text放在RelativeLayout上,并将其应用于TextView,您也不希望这样做。)

我的第一个建议(以及最简单的即时解决方案)是使用TextView内置的对复合drawable的支持,因此您只需使用TextView而不是include s您想要的属性的样式资源。

如果这对您的用例不够好,那么您可能需要制作自定义视图。此视图将替换RelativeLayout,并将TextViewImageView作为子级。要确定的主要内容是创建子项的位置和方式以及获取它们的引用:在构造父项时,可以使用Java手动创建它们;或者您可以使用<include>和/或<merge> s的某些布局组合。使文本属性有效需要使用<declare-styleable>

我假设你希望孩子们总是看起来一样,并且你想重用你已经做过的布局(即你不想手动设置所有属性),所以这就是我可能会做的:< / p>

public class MyButton extends RelativeLayout {

    private TextView mTextView;
    private ImageView mImageView;

    public MyButton(Context context) {
        super(context);
        init(context, null);
    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attributeSet) {
        LayoutInflater inflater = LayoutInflater.from(context);
        inflater.inflate(R.layout.my_button, this, true); // used with merge tag
        mTextView = (TextView) findViewById(R.id.text);
        mImageView = (ImageView) findViewById(R.id.image);

        int[] attrs = {android.R.attr.text};
        TypedArray a = context.obtainStyleAttributes(attributeSet, attrs);
        String text = a.getString(0, null);
        mTextView.setText(text);
        a.recycle();
    }
}

res/layout/my_button.xml

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="13dp"
        android:textSize="20dp"
        android:text="CHANGE ME"
        android:id="@+id/text" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:layout_marginRight="25dp"
        android:layout_alignParentRight="true"
        android:src="@drawable/left"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:maxHeight="30dp"
        android:maxWidth="30dp"/>
</merge>

在您的活动布局中:

...
<!-- no more include -->
<com.package.MyButton
    android:id="@+id/something"
    android:layout_width="..."
    android:layout_height="..."
    android:text="..." />

<!-- you can have multiple instances with different IDs -->
<com.package.MyButton
    android:id="@+id/something_else"
    android:layout_width="..."
    android:layout_height="..."
    android:text="..." />
...

您也可以使用自己的<declare-styleable>作为自定义视图,如果以后要为其提供自定义XML属性,这将是必要的,但上述方法应该足够了。