我需要一些我正在制作的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
答案 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仿真器中给了我以下输出。
所以问题不在于风格。