私が作っている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 -xlarge
etc...マップの下に配置できます。
だから私の質問は:どうすればこれを行うことができますか?
または、プログラムで作成された複数のビューのスタイルを設定するためのより良い方法はありますか?
編集:私はこれに関する他の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