【问题标题】:Android: calculating view size inside MyAdapter::getViewAndroid:在 MyAdapter::getView 中计算视图大小
【发布时间】:2012-01-10 09:49:28
【问题描述】:

我有一个ListView,我在其中动态填充getView() 方法中的列表项,并结合TextViewImageView

我需要计算getView 中Text 和Image 视图的大小,所以如果View 太大,我可以设置visibility=gone。我正在尝试:

public View getView(int position, View convertView, ViewGroup parent) {
  ..
  View listItem=view.findViewById(R.id.listItem);
  ImageView imageView=(ImageView)view.findViewById(R.id.myImg);
  TextView textView=(TextView)view.findViewById(R.id.mytxt);
  if (imageView.getRight()>listItemText.getRight()) {
    imageView.setVisibility(View.GONE);   
  }
  if (textView.getRight()>listItemText.getRight()) {
    textView.setVisibility(View.GONE);    
  }
  ..
}

但是,由于我在 getView() 内部,因此尚未创建 layout 的值,因此我得到了 View.getRight() 调用的错误值。

任何想法如何做到这一点?

【问题讨论】:

  • 你为什么不根据你要放在 TextView 中的字符串的长度来决定呢?
  • 因为相同的文本长度可能有不同的实际宽度
  • 如何计算listItemtext的整个宽度并减去宽度。如果您的文本视图和图像视图内容对于该特定宽度足够小。显示或隐藏它。只是一个奇怪的问题,您不能省略文本并缩小图像以使其始终显示吗?

标签: android listview layout android-ui


【解决方案1】:

如果你真的需要做这样的事情,你可以注册一个onLayoutChangeListener并监听布局参数的变化,比如左、右、上、下。

textView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                // TODO: Take care of visibility here. You can access the parent View by v.getParent() method.
            }
        });

但是你不应该在getView 方法中做这样的事情。您可以使 textView 多行,或在 textView 的布局上设置 android:ellipsize="marquee"。更多关于选框: Marquee text in Android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多