当前位置: 首页 > 面试题库 >

以编程方式设置ListView的高度

师承弼
2023-03-14
问题内容

我的活动中有TextViewListViewListView最初设置为Visibility = gone我需要一个功能,例如用户单击TextViewListView绑定并显示为“ Wrap_Content”。到目前为止,我已经编写了代码

我的XMl文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/txtDate"
    android:textSize="50dp"
    android:background="@color/colorSplash"
    android:text="20-11-2016"/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/lstDesc"
    android:visibility="gone" />

Java代码

 private void BindBookedList(){
  final ArrayList<String> arr = new ArrayList<>();
    arr.add("21-11-2016");
    arr.add("22-11-2016");
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_collapse, arr){
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
           View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.list_collapse, null);
            }
            final TextView txtDate = (TextView) v.findViewById(R.id.txtDate);
            final ListView lstDesc = (ListView) v.findViewById(R.id.lstDesc);
            String strItemDAta = arr.get(position);
            txtDate.setText(strItemDAta);
            String[] arrContries =  getResources().getStringArray(R.array.ListOfAirport);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>
                    (getApplicationContext(), R.layout.spinner_item, arrContries);
            lstDesc.setAdapter(adapter);
            txtDate.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view) {

                    com.kommlabs.pikmybox.MyUtlilites.ViewAnimationUtils.expand(lstDesc);
                }
            });
            return v;
        }
    };
    ListView listBooked = ((ListView) findViewById(R.id.lstBookedPackages));
    listBooked.setAdapter(adapter);
}

ViewAnimationUtils类

public class ViewAnimationUtils {
static View view;
public static void expand(View v) {
    view = v;
    v.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    final int targtetHeight = v.getMeasuredHeight();
    v.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
    v.setVisibility(View.VISIBLE);

}

在这段代码中,我正在调用类的Expand函数ViewAnimationUtils。在扩展功能中,我将布局高度设置为,Wrap_Content但是Listview渲染高度最多只显示一项。Listview绑定有8个项目。

如何设置高度ListView以显示列表中的所有项目?


问题答案:

这将为您提供帮助。

 ListAdapter listadp = listview.getAdapter();
       if (listadp != null) {
           int totalHeight = 0;
           for (int i = 0; i < listadp.getCount(); i++) {
               View listItem = listadp.getView(i, null, listview);
               listItem.measure(0, 0);
               totalHeight += listItem.getMeasuredHeight();
           }
           ViewGroup.LayoutParams params = listview.getLayoutParams();
           params.height = totalHeight + (listview.getDividerHeight() * (listadp.getCount() - 1));
           listview.setLayoutParams(params);
           listview.requestLayout();


 类似资料:
  • 问题内容: 我正在使用来自Android百分比支持包的PercentRelativeLayout。这就是我的布局。 我想以编程方式更改高度。我该如何使用或其他方式进行操作。 问题答案: 您要设置一个新的百分比值吗?如果是,则需要:

  • 问题内容: 如何通过ImageView编程设置的宽度和高度? 问题答案: 设置ImageView的高度可能为时已晚,但是为了其他有相同问题的人: 希望这可以帮助。 重要。如果要在布局已经“布局”之后设置高度,请确保还调用:

  • 有没有办法以编程方式自定义这些TextInputLayout属性: textColorHint 彩色口音 颜色控制正常 颜色控制已激活 文本选择句柄 我知道如何使用主题属性对它们进行样式化,但是我正在处理的项目动态地加载颜色信息,据我所知,在运行时无法更改主题/样式值。

  • 问题内容: 我正在尝试实施一个。当我使用“自动布局”时,单元格不会更改大小,而是对齐。 现在我想将其大小更改为例如 我尝试设置 虽然没有用。 有没有办法做到这一点? 编辑 : 看来,答案只会改变我的CollectionView宽度和高度本身。约束中可能存在冲突吗?有什么想法吗? 问题答案: 使用此方法设置自定义像元高度宽度。 确保添加此协议 如果您使用的是 swift 5 或 xcode 11 及

  • 问题内容: 我正在尝试在应用程序启动期间进行设置,但似乎为时已晚,非无头模式已经启动: 除此之外,还有另一种方法让无头为真吗?我不希望在控制台上进行任何配置。 问题答案: 我正在使用一个类,该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。 将静态加载块移到类的顶部解决了我的问题。 这不起作用: 通过将Java移动到类的顶部,让Java尽早执行该静态块! 当考虑它时,这是完全有

  • 问题内容: 有没有一种方法可以通过编程设置属性?似乎没有方法。 明确地说,我不是在谈论视图/窗口小部件样式!我在谈论以下内容: 问题答案: setTypeface是属性textStyle。 正如 Shankar V 添加的那样,要保留以前设置的字体属性,可以使用: