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 はすべてのスペースを占有します。
  • 2 番目の LL は、スペースの 50% を 1 LL と共有します。
  • 3 番目の 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 に答える