LinearLayoutにプログラムで境界線を追加するにはどうすればよいですか?このレイアウトを作成するとしましょう:
LinearLayout TitleLayout = new LinearLayout(getApplicationContext());
TitleLayout.setOrientation(LinearLayout.HORIZONTAL);
それでは私は何をしますか?
上記の答えは正しくないと思います。質問では、それを実行するためのprogrammaticバージョンが具体的に求められ、最初に表示されるのはxmlです。第二に、部分的にxmlを実行することは私の場合ほとんどオプションではないので、ここに正しい答えがあります:
//use a GradientDrawable with only one color set, to make it a solid color
GradientDrawable border = new GradientDrawable();
border.setColor(0xFFFFFFFF); //white background
border.setStroke(1, 0xFF000000); //black border with full opacity
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
TitleLayout.setBackgroundDrawable(border);
} else {
TitleLayout.setBackground(border);
}
以下のように、drawableフォルダーにborder.xmlというXMLを作成します。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="#FF0000" />
</shape>
</item>
<item Android:left="5dp" Android:right="5dp" Android:top="5dp" >
<shape Android:shape="rectangle">
<solid Android:color="#000000" />
</shape>
</item>
</layer-list>
次に、これを次のように背景として線形レイアウトに追加します。
Android:background="@drawable/border"
プログラム的に
TitleLayout.setBackgroundDrawable(getResources().getDrawable(R.drawable.border))
編集:
Jelly Bean以降、このメソッド(setBackgroundDrawableは非推奨になりました)なので、これを使用する必要があります。
TitleLayout.setBackground(getResources().getDrawable(R.drawable.border));
この助けを願っています。
Xamarinユーザーの場合:
新しいクラス境界を追加します。
public class Border : Android.Graphics.Drawables.Drawable
{
public Android.Graphics.Paint paint;
public Android.Graphics.Rect bounds_rect;
public Border(Android.Graphics.Color colour, int width)
{
this.Paint = new Android.Graphics.Paint();
this.Paint.Color = colour;
this.Paint.StrokeWidth = width;
this.Paint.SetStyle(Android.Graphics.Paint.Style.Stroke);
}
public override int Opacity => 0;
protected override void OnBoundsChange(Rect bounds)
{
base.OnBoundsChange(bounds);
this.bounds_rect = bounds;
}
public override void Draw(Canvas canvas)
{
canvas.DrawRect(this.bounds_rect, this.Paint);
}
public override void SetAlpha(int alpha)
{
//throw new NotImplementedException();
}
public override void SetColorFilter(ColorFilter colorFilter)
{
//throw new NotImplementedException();
}
}
そして、次のように使用します。
TitleLayout.SetBackgroundDrawable(new Border(Color.Black, 5));