web-dev-qa-db-ja.com

プログラムでLinearLayoutに境界線を追加します

LinearLayoutにプログラムで境界線を追加するにはどうすればよいですか?このレイアウトを作成するとしましょう:

LinearLayout TitleLayout = new LinearLayout(getApplicationContext());
TitleLayout.setOrientation(LinearLayout.HORIZONTAL);

それでは私は何をしますか?

13

上記の答えは正しくないと思います。質問では、それを実行するための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);
    }
48

以下のように、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));

この助けを願っています。

4
MDMalik

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));
0
Arti