动态设置LinearLayout的宽度?

时间:2012-10-03 09:45:22

标签: android width android-linearlayout

我想制作自己的自定义“进度条”。我这样做是通过绘制线性布局,每个布局都有不同的颜色。之后,我想为每个人分配一个宽度,使其看起来像一个进度条。我现在所拥有的东西:

我的CustomAdapter项目的XML文件(在Gridview中):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#33c2bd" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/lineScore"
        android:layout_width="20dp"
        android:layout_height="2dp"
        android:background="#eef05e" 
        android:paddingLeft="20dp"
        android:paddingTop="0dp"
        android:paddingBottom="20dp"
        android:layout_below="@+id/tvLevelScore"/>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/lineScoreTotal"
        android:layout_width="20dp"
        android:layout_height="2dp"
        android:background="#0d7975" 
        android:paddingRight="20dp"
        android:paddingTop="0dp"
        android:paddingBottom="20dp"
        android:layout_below="@+id/tvLevelScore"
        android:layout_toRightOf="@+id/lineScore"/>

</RelativeLayout>

然后在getView方法下的CustomAdapter类中,我试图将lineScoreTotal设置为项目宽度的80%:

double viewWidth = (double) mView.getWidth();
            int widthScoreBar = (int) (viewWidth * 0.8);
            LinearLayout ln = (LinearLayout) mView.findViewById(R.id.lineScoreTotal);
            ln.layout(0, 2, widthScoreBar, -1);

然而,它什么都不做......我是否应用错误的代码来设置宽度?或者我使用LinearLayout绘制那些“条形”的想法可能是错误的做法?

编辑getView方法:

@Override
    public View getView(int position, View v, ViewGroup parent) {
        View mView = v;

        if (mView == null) {

            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            mView = vi.inflate(R.layout.levelselector_item, null);

        }

        TextView level = (TextView) mView.findViewById(R.id.tvLevel);
        TextView levelScore = (TextView) mView.findViewById(R.id.tvLevelScore);

        if (mView != null) {

            level.setText(Integer.toString(getItem(position).getLevel()));

            loadDataBase();
            int correctAnswers = myDbHelper.getCorrectAnswers(getItem(position).getLevel());
            correctAnswersPrev = 0;
            correctAnswersPrev = myDbHelper.getCorrectAnswersPrev(getItem(position).getLevel());

            String correct = Integer.toString(correctAnswers);

            levelScore.setText(correct + "/60");
            level.setTypeface(font);
            levelScore.setTypeface(font);

            LinearLayout ln = (LinearLayout) mView.findViewById(R.id.lineScoreTotal);
            ln.setLayoutParams(new FrameLayout.LayoutParams(10, 10));
}
        return mView;
    }

2 个答案:

答案 0 :(得分:3)

尝试任何一种方式

无重力

ln.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

或重力

ln.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT,1f));

答案 1 :(得分:0)

ln.setLayoutParams(new
       LayoutParams(widthScoreBar,LayoutParams.WRAP_CONTENT));

尝试使用LayoutParams进行设置。