LinearLayout 使用 java 代码动态设置边框颜色而不使用 XML

LinearLayout set border color dynamically using java code without XML

我已经对这个问题做了一些研究,但我还没有发现任何类似的东西。

首先,我使用 ShapeDrawable 制作了线性布局的边框,然后我尝试在 LinearLayout 上设置背景颜色,但未设置颜色,然后我评论了两行 ShapeDrawable,然后在我设置了线性布局的背景颜色之后,但是边框颜色出现问题。

这是我通过 JSON 背景颜色和边框颜色得到的值。

我想通过 java 代码动态设置线性布局的背景颜色和边框颜色。

请指导我。

谢谢

LinearLayout linearToAdd = new LinearLayout(getActivity());
linearToAdd.setOrientation(VERTICAL);
float d = getActivity().getResources().getDisplayMetrics().density;

  linearToAdd.setBackgroundColor(Color.parseColor((String)(mPod.getBackground())));

    switch(parentType){
    case LINEAR_LAYOUT:
        LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int)(mPod.getWidth()*d),(int)(mPod.getHeight()*d));
        Log.d(TAG,"LinLay, W,H,T,L: "+mPod.getWidth()+", "+mPod.getHeight()+", "+mPod.getLeft()+", "+mPod.getTop());
        linearParams.setMargins(mPod.getLeft(), mPod.getTop(), 0,0);            
        linearToAdd.setLayoutParams(linearParams);

               ShapeDrawable rectShapeDrawable1 = new ShapeDrawable();
               Paint paint1 = rectShapeDrawable1.getPaint();
        //     paint1.setColor(Color.rgb(0, 0, 0));
               paint1.setStyle(Paint.Style.STROKE);
               paint1.setStrokeWidth(3);

        //     linearToAdd.setBackgroundDrawable(rectShapeDrawable1);

               break;
    } 

你可以试试GradientDrawable。我试过这个。希望对你有帮助。

GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setStroke(3, Color.BLACK);
drawable.setCornerRadius(8);
drawable.setColor(Color.BLUE);
linearToAdd.setBackgroundDrawable(drawable);

在您的 XML 布局中,将 android:padding="1dp" 指定给 linearToAdd。

覆盖 windows 如下所示的 focuschanged 监听器

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int)(mPod.getWidth()*d),(int)(mPod.getHeight()*d));
        Log.d(TAG,"LinLay, W,H,T,L: "+mPod.getWidth()+", "+mPod.getHeight()+", "+mPod.getLeft()+", "+mPod.getTop());
        linearParams.setMargins(mPod.getLeft(), mPod.getTop(), 0,0);            
        linearToAdd.setLayoutParams(linearParams);

        Bitmap bitMap = Bitmap.createBitmap(linearParams.width, linearParams.height, Bitmap.Config.ARGB_8888);

        Canvas canvas=new Canvas(bitMap);

        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.parseColor((String)(mPod.getBackground())));

        Paint borderPaint = new Paint();
        borderPaint.setAntiAlias(true);
        borderPaint.setColor(Color.parseColor((String)(mPod.getBorder())));

        canvas.drawRect(linearToAdd.getLeft(), linearToAdd.getTop(), linearToAdd.getRight(), linearToAdd.getBottom(), borderPaint);
        canvas.drawRect(linearToAdd.getLeft()+2, linearToAdd.getTop()+2, linearToAdd.getRight()-2, linearToAdd.getBottom()-2, paint);

        Drawable linearToAdd_bg=new BitmapDrawable(bitMap);

        linearToAdd.setBackground(linearToAdd_bg);

    }