自定义xml relativelayout包含多次使用的视图

时间:2012-12-17 11:48:48

标签: java android xml

我需要一些我正在制作的Android应用程序的帮助,让我解释一下:

当前解决方案:工作但不是最佳

在我的XML中,我定义了TableLayout。 我以编程方式将4个视图添加到行(RelativeLayout),然后将此行添加到TableLayout。 这4个视图最多可以有25行。 这工作正常。但是我在为多种布局设计这些问题时遇到了问题。 以编程方式设置边距,填充,权重都可以,但是有很多不同的设备使得它很难维护。 (据我所知,TableRow不允许对齐右边) 具体来说,我想将最后一个视图与屏幕右侧对齐。

我想拥有什么:

我会创建一个包含这4个视图布局的XML文件(可能在RelativeLayout中)。然后,我想使用我定义的XML布局以编程方式添加这4个视图。

我可以做某种(伪代码出现):

TextView1 = new TextView
TextView2 = new TextView
TextView3 = new TextView
TextView4 = new TextView
//Do stuff with the textviews
X = getXMLLayout(definedXMLlayout)
X.view(1) = TextView1
X.view(2) = TextView2
X.view(3) = TextView3
X.view(4) = TextView4
TableLayout.addRow(X)

这样我就可以在.xml文件中设置RelativeLayout行的样式,并将它们放在-large -land -xlarge等...地图下。

所以我的问题是:我该怎么做?

或者,有没有更好的方法来设置多个以编程方式创建的视图?

编辑:我确实读过有关此内容的其他SO文章,但大多数都没有准确描述我需要的内容。我知道我可以在代码中添加所有视图,但是我还必须在代码中设置它们的样式,这是我不想要的。 (我知道样式文件,但这对我来说也不是一个好选择)

GRTS

EDIT2:

嗨Shreva,

基本上这个“有效”,我确实需要更改以下代码

final LayoutInflater lyInflater= (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

而不是LinearLayout我正在使用RelativeLayout。 但由于某种原因,布局不正确,这是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/rl_playerCard"
    android:layout_height="wrap_content"
    android:background="@drawable/playercard" >
<TextView
        android:id="@+id/tv_min"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        style="@style/txtMin"
        android:text="@string/str_min" />

    <TextView
        android:id="@+id/tv_plus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/tv_min"
        style="@style/txtPlus"
        android:text="@string/str_plus" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/tv_plus"
        style="@style/txtPlayercardGrey"
        android:text="name" />

    <TextView
        android:id="@+id/tv_score"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        style="@style/txtPlayercardGreen"
        android:text="score" />
</RelativeLayout>

填充/边距在我的styles.xml文件中完成,还有一些文本颜色&amp;字体大小。 现在,3个视图位于屏幕边缘的左侧,彼此顶部。 tv_score在右侧。 所以这意味着没有考虑边距/填充,

也没有考虑
android:layout_toRightOf

知道为什么会这样吗?

GRTS

EDIT3

这些是我定义的4种风格,我还有其他的工作正常。当在图形布局中查看xml布局时,一切看起来都很好。

<!-- playercard name -->
    <style name="txtPlayercardGrey" parent="@android:style/Widget.TextView">
        <item name="android:textSize">17sp</item>
        <item name="android:textColor">#666666</item>
        <item name="android:layout_marginLeft">15dp</item>
    </style>

    <!-- playercard score -->
    <style name="txtPlayercardGreen" parent="@android:style/Widget.TextView">
        <item name="android:textSize">17sp</item>
        <item name="android:textColor">#7DC500</item>
        <item name="android:layout_marginRight">15dp</item>
    </style> 

    <style name="txtMin" parent="@android:style/Widget.TextView">
        <item name="android:textSize">25sp</item>
        <item name="android:textColor">#ff0000</item>
        <item name="android:paddingLeft">15dp</item>
        <item name="android:paddingRight">15dp</item>
        <item name="android:layout_marginLeft">15dp</item>
        <item name="android:layout_marginRight">15dp</item>

    </style>

    <style name="txtPlus" parent="@android:style/Widget.TextView">
        <item name="android:textSize">25sp</item>
        <item name="android:textColor">#00a62b</item>
        <item name="android:paddingLeft">15dp</item>
        <item name="android:paddingRight">15dp</item>
        <item name="android:layout_marginLeft">15dp</item>
        <item name="android:layout_marginRight">15dp</item>
    </style>

这是一张它看起来如何的图片: http://i.stack.imgur.com/lNN05.png

以及它应该如何显示: http://i.stack.imgur.com/lNBYS.png

1 个答案:

答案 0 :(得分:0)

你可以使用通货膨胀

final LayoutInflater lyInflater= (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lLayoutRow = (LinearLayout) lyInflater.inflate(
                R.layout.table_row_layout, null);

TextView tv1 = (TextView) lLayoutRow.findViewById(R.id.rowTv1);
TextView tv2 = (TextView) lLayoutRow.findViewById(R.id.rowTv2);
TextView tv3 = (TextView) lLayoutRow.findViewById(R.id.rowTv3);
TextView tv4 = (TextView) lLayoutRow.findViewById(R.id.rowTv4);

编辑:

我用styles.xml尝试了你的代码。我在主要布局中给它充气了。它在3.2“QVGA仿真器中给了我以下输出。

Screenshot

所以问题不在于风格。