1

私が作っている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)

RelativeLayoutこのようにして、これらの行を.xmlファイルでスタイル設定し、 -large -land -xlargeetc...マップの下に配置できます。

だから私の質問は:どうすればこれを行うことができますか?

または、プログラムで作成された複数のビューのスタイルを設定するためのより良い方法はありますか?

編集:私はこれに関する他のSOの記事を読みましたが、ほとんどは私が必要とするものを正確に説明していません。すべてのビューをコードで追加できることはわかっていますが、コードでスタイルを設定する必要もあります。これは望ましくありません。(そして私はスタイルファイルについて知っていますが、これも私にとって良いオプションではありません)

Grts

Edit2:

こんにちはシュレバ、

基本的にこの「動作」、私は次のコードを変更する必要がありました

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ファイルで行われ、テキストの色とサイズもいくつかあります。これで、画面の端の左側に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

4

1 に答える 1

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エミュレーターで次の出力を与えました。

スクリーンショット

したがって、問題はスタイルによるものではありません。

于 2012-12-17T11:51:29.277 に答える