ビューの背景として設定するシンプルなDrawableを作成しようとしています(setBackgroundDrawableを使用)。ドローアブルの背景を2つの等しい長方形(50%-50%)に分割したいだけです。最初は黒で塗りつぶし、2番目は白で塗りつぶします。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/back_color_1">
<shape Android:shape="rectangle">
<solid Android:color="#000000" />
</shape>
</item>
<item Android:id="@+id/back_color_2">
<shape Android:shape="rectangle">
<solid Android:color="#FFFFFF" />
</shape>
</item>
</layer-list>
描画可能なXML定義ファイルで、各図形の幅を50%に指定するにはどうすればよいですか? Android:width = "50%"のようなもの。
(Android 3.0に取り組んでいますが、それは一般的なAndroidの質問だと思います。)
PS:CSSまたはXAMLでこれを行うことができます。
パーセンテージは指定できません。それにディメンション値を指定する必要があります。
_Android:width
_はここで定義されています: http://developer.Android.com/reference/Android/R.attr.html#width :
(強調鉱山)
ディメンション値である必要があります。これは、「14.5sp」などの単位が追加された浮動小数点数です。使用可能な単位は、px(ピクセル)、dp(密度非依存ピクセル)、sp(優先フォントサイズに基づいてスケーリングされたピクセル)、in(インチ)、mm(ミリメートル)です。
各次元タイプの定義については、次を参照してください: http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension
独自の属性( styleable を参照)を作成し、onDraw(...)
で自分で計算を実行する必要があります。
例については、これらの2つの質問とその中のリンクを参照してください:
Android:layout_weight = "。20"は、パーセンテージで実装する最良の方法です
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<TextView
Android:id="@+id/logTextBox"
Android:layout_width="fill_parent"
Android:layout_height="0dp"
Android:layout_weight=".20"
Android:maxLines="500"
Android:scrollbars="vertical"
Android:singleLine="false"
Android:text="@string/logText" >
</TextView>
</LinearLayout>
本当のパーセンテージ設定はありませんが、近づくかもしれません。
これを実現する最も簡単な方法は、画像を背景のドローアブルとして使用し、白黒の分割画像を作成することです。
私が何かを分割する他の唯一の方法は、2つのビューを使用することです。それぞれに独自のbgカラーがあり、Android:layout_weight属性に同じ正の値(つまり、50/50)が指定されています。次に、使用可能なスペースを分割します。
お役に立てれば!
これを実現するために私が見つけた方法は、RelativeLayoutから継承する独自のクラスを作成することでした。ここで、onMeasureメソッドをオーバーライドしています。この段階では、ビューの高さがわかっているので、背景をフェッチし、手動で setLayerInset を使用してアイテムのインセットを設定しました。
LayerDrawable bg = (LayerDrawable)getBackground();
int h = getMeasuredHeight();
bg.setLayerInset(1, 0, 0, 0, h/2);
ただし、この方法は少し面倒です。ほとんどの場合、chrisが提供する答えで十分です。
Swapnilが述べた最善の方法は、LinearLayoutでlayout_weightを使用することです。水平方向に移動する場合は、layout_widthを「fill_parent」に設定し、次に、layout_weightを必要なパーセンテージに設定します。以下のようなものから始めて、layout_width値をいじって感じてください(または、理解を深めるためにビューを追加してください)。
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation = "horizontal" >
<View
Android:layout_width="fill_parent"
Android:layout_height="30dip"
Android:layout_weight="0.5"
Android:background="#aaffaa" />
<View
Android:layout_width="fill_parent"
Android:layout_height="30dip"
Android:layout_weight="0.5"
Android:background="#aaaaff" />
</LinearLayout>