2015-07-28 2 views
0

Строка ниже с комментарием «no effect» имеет ... никакого эффекта, то есть ширина не установлена ​​на 200. ListView заполняет всю ширину экрана. Что я делаю не так?Параметр ListView width не имеет эффекта

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.list_alphabet_layout); 
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); 
relativeLayout.setLayoutParams(layoutParams); 

ListView listView = new ListView(this); 
// the following line as no effect 
listView.setLayoutParams(new ViewGroup.LayoutParams(200, ViewGroup.LayoutParams.MATCH_PARENT)); 
listView.setFastScrollEnabled(true); 

// side index 
LinearLayout sideIndexLinearLayout = new LinearLayout(this); 
sideIndexLinearLayout.setId(R.id.sideIndex); 

LinearLayout.LayoutParams sideIndexLinearLayoutParams = new LinearLayout.LayoutParams(100, // width 
                                               LinearLayout.LayoutParams.MATCH_PARENT); // height 
sideIndexLinearLayout.setLayoutParams(sideIndexLinearLayoutParams); 
sideIndexLinearLayout.setGravity(Gravity.CENTER_HORIZONTAL); 
sideIndexLinearLayout.setOrientation(LinearLayout.VERTICAL); 

// add now so that sideIndexLinearLayout is a child of the RelativeLayout. 
// This will enable us to get the RelativeLayout.LayoutParams to addRule() 
relativeLayout.addView(listView); 
relativeLayout.addView(sideIndexLinearLayout); 

RelativeLayout.LayoutParams listViewParams = (RelativeLayout.LayoutParams)listView.getLayoutParams(); 
listViewParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
listView.setLayoutParams(listViewParams); //causes layout update 

RelativeLayout.LayoutParams sideIndexParams = (RelativeLayout.LayoutParams)sideIndexLinearLayout.getLayoutParams(); 
sideIndexParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
sideIndexLinearLayout.setLayoutParams(sideIndexParams); //causes layout update 

XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/list_alphabet_layout" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

</RelativeLayout> 

ответ

1

Здесь

listView.setLayoutParams(new ViewGroup.LayoutParams(200, ViewGroup.LayoutParams.MATCH_PARENT)); 
listView.setFastScrollEnabled(true); 

Попробуйте установить

listView.setLayoutParams(new RelativeLayout.LayoutParams(200, RelativeLayout.LayoutParams.MATCH_PARENT)); 
listView.setFastScrollEnabled(true); 

вместо

Параметры макета зависят от элемента контейнера. В этом случае ListView находится внутри RelativeLayout, поэтому вам нужно RelativeLayout.LayoutParams

+0

Спасибо за ответ, но это не имеет значения. Я попытался переместить это после того, как ListView был добавлен в RelativeLayout, но это тоже не имело значения. –

+0

так, может быть, ViewGroup.LayoutParams.MATCH_PARENT возвращает 0? –

+0

На самом деле, я думаю, что ваш ответ правильный, насколько это возможно. Позже в коде есть адаптер, который возится с макетом строк, и я думаю, что здесь мне нужно изменить код. –

Смежные вопросы