当前位置: 首页 > 知识库问答 >
问题:

LinearLayout使用java代码动态设置边框颜色,无需XML

国晟睿
2023-03-14

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

首先,我使用ShapeDrawable创建了一个线性布局的边框,然后我尝试在LinearLayout上设置背景色,但颜色未设置,然后我对两行ShapeDrowable进行了注释,然后在设置了线性布局的背景色之后,但边框颜色出现了问题。

这是我通过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;
    } 

共有2个答案

姚宪
2023-03-14

窗口焦点上的overide更改了侦听器,如下所示

    @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);

    }
方长卿
2023-03-14

您可以尝试通过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。

 类似资料:
  • 当前结果:下边框为灰色 所需结果:所有边框均为白色 问题:CSS中的边框颜色设置为白色

  • 我必须动态更改代理的边框颜色。代理在显示屏上显示为默认圆圈。显示的颜色必须根据代理类中定义的布尔变量进行更改。第一次创建并显示代理时,它的样式正确,但当代理类中的boolen变量更改时,边框颜色不会更改。如果我对代理的填充颜色也做同样的处理,效果会很好。我把我使用的代码放在这里: 创建代理并将其添加到上下文时,它会采用正确的颜色,但如果更改,则边框颜色不会更改。我也尝试过同样的方法导入接口,但问题

  • null null 当我关注文本字段时,背景和边框颜色分别变为黄色和绿色(通过css)。 如果单击submit而不输入任何内容,边框颜色将变为红色(通过javascript)。 但当我再次将焦点放在文本字段时,红色边框颜色并没有消失,而是同时出现绿色和红色边框。 我只希望它是绿色的。你能不能也解释一下这种行为的原因。

  • 我试图在Android8中使用Shape Drawable(在Drawable中创建button_start.xml)设置按钮的背景颜色和边框颜色,但似乎不起作用。

  • 我有一个表格,每个边框都设置为1px宽。我希望顶部、左侧和底部边框是黑色的,右侧边框是白色的。所以,我使用了这个css代码 问题出现在IE9中,其中右上角的像素为白色,而右下角的像素为黑色。 我怀疑问题来自IE9重组样式的方式,因为当我在开发工具控制台中查看我的表的css时,它是这样排序的: 这让我想,也许,用于定义颜色的顺序使其顶部边框为黑色,然后右侧边框为白色(覆盖右上角),然后底部边框为黑色

  • 问题内容: 一开始,我想说我是开发人员领域的新手。 我试图生成一个Excel工作表,其中包含带边框的Mutiplication表并设置背景颜色,但仅用于第一列和第一行。 这是一个正确的例子:正确的例子 我写了类似的东西,但是结果文件彩色单元格没有边框:(。 请向我解释如何同时设置背景颜色和边框。 问题答案: 更改 为 您可以如下设置边框: 这将根据需要为您提供黄色和边框