11

我在 xml 中有 LinearLayout:

    <LinearLayout
        android:id="@+id/progress"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/progress_height"
        android:layout_alignParentBottom="true"
        android:baselineAligned="false"
        android:orientation="horizontal" />

我想动态地生成一些其他的 LinearLayouts 并将它们以相等的间隔放置到“进度”中,例如:

  • 第一个添加的 LinearLayout 将占据所有空间。
  • 第二个LL将与1LL共享50%的空间
  • 第三个 LL 将与 1LL 和 2LL 共享 33% 的空间
  • 等等...

每个 LinearLayout 都会有随机的背景颜色,我写了这样的东西:

mProgress = (LinearLayout) findViewById(R.id.progress);
.
.
.
LinearLayout prog = new LinearLayout(this);
            prog.setBackgroundColor(CommonUtils.getNextRandomColor());
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);

            prog.setLayoutParams(params);
            mProgress.addView(prog);

当用户按下按钮时,将生成另一个具有不同颜色的 LL。

我的方法不起作用。布局中没有背景颜色。

也许还有另一种更简单的方法来实现某种颜色平均共享一些空间的进度条?

4

3 回答 3

11

仔细检查getNextRandomColor是否返回类似.-

getResources().getColor(colorResId);

而不仅仅是一个colorResId. 如果是这种情况,你可以试试这个。-

prog.setBackgroundColor(getResources().getColor(CommonUtils.getNextRandomColor()));

无论如何,如果您正在构建多色进度条,您应该考虑更改单个布局的宽度,并使用渐变颜色。

于 2013-10-10T07:23:24.947 回答
5
LinearLayout lp = new LinearLayout(context) ;
LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(width, height , .60f);
lp.setLayoutParams(layoutParams);


//for setting the background color  // input your color
LinearLayout.setBackgroundColor(Color.parseColor("#000000"));

或者

直接调用颜色

lp.setBackgroundColor(Color.WHITE);
于 2014-01-30T12:24:52.907 回答
1

你可以试试这个。

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add Layout" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:id="@+id/main_lay">
    </LinearLayout>

</LinearLayout>

MainActivity.java

package com.example.testlayout;

import java.util.Random;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity implements OnClickListener{


    private Button add_btn;
    private  LinearLayout main_lay;
    private LinearLayout.LayoutParams param;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init()
    {
        main_lay = (LinearLayout)findViewById(R.id.main_lay);
        add_btn = (Button)findViewById(R.id.button1);
        add_btn.setOnClickListener(this);
        param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT,1);

    }

    @Override
    public void onClick(View v) {

        if(v == add_btn)
        {
            LinearLayout lay = new LinearLayout(this);
            lay.setLayoutParams(param);
            Random rnd = new Random(); 
            int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));   
            lay.setBackgroundColor(color);
            main_lay.addView(lay);

        }
    }


}
于 2013-10-10T07:22:09.577 回答