gpt4 book ai didi

android - 未在 ListView 中调用子类化的 RelativeLayout onDraw() 方法

转载 作者:太空狗 更新时间:2023-10-29 15:41:43 27 4
gpt4 key购买 nike

这里有一些关于我正在努力实现的目标的背景知识,以帮助使我的问题更清楚一些......我正在创建一个抽屉导航,其中 ListView 中的每个项目看起来类似于以下内容:

ListItem

但是,我需要能够以编程方式将右侧边框的颜色(蓝色)更改为各种不同的颜色,因此在尝试解决方案时,我决定扩展 RelativeLayout。并在 onDraw(Canvas c); 中画线方法。我的RelativeLayout代码如下:

public class CustomRelativeLayout extends RelativeLayout {

private final Paint paint = new Paint();

public CustomRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

//Other Constructors

private void init() {
setPaintColor(Color.argb(128, 0, 0, 0));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(getMeasuredWidth() - 1, 0, getMeasuredWidth() - 1, getMeasuredHeight(), paint);
}

public void setPaintColor(int color){
paint.setColor(color);
invalidate();
}
}

我的 NavigationDrawerListView还包含一个使用此类的 header ,它可以很好地用作 header View 。但是,对于每个人 ListView项,边框不存在。我调试了我的解决方案,发现我的子类 RelativeLayoutonDraw(Canvas c);为标题 View 调用方法,但不会为每个 ListView 调用我的 ArrayAdapter<String> 提供的 subview .

我知道还有其他方法可以处理这个问题,比如使用默认的 View ,将它的背景设置为我想要的颜色,并将其右对齐 - 但这不是我的问题。我的问题是为什么我的 CustomRelativeLayoutonDraw(Canvas c);ListView 调用方法的标题 View ,而不是我的适配器提供的每个 View ?任何对此行为的洞察力将不胜感激。另外,这里是 CustomArrayAdapternav_drawer_item.xmlListView 一起使用如果它们有帮助:

public class SimpleDrawerAdapter extends ArrayAdapter<String> {

public SimpleDrawerAdapter(Context context, int resource,
String[] sections) {
super(context, resource, sections);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
RelativeLayout container = null;

if(convertView == null){
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
container = (CustomRelativeLayout) inflater.inflate(R.layout.nav_drawer_item, parent, false);
} else {
container = (CustomRelativeLayout) convertView;
}

((TextView)container.findViewById(R.id.nav_item_text)).setText(getItem(position));

return container;
}

}

nav_drawer_item.xml

<?xml version="1.0" encoding="utf-8"?>
<com.mypackage.views.CustomRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="wrap_content">

<TextView
android:id="@+id/nav_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/nav_drawer_grey"
android:textSize="@dimen/text_large"
android:layout_margin="@dimen/navigation_drawer_item_margin"
android:paddingTop="4dp"
android:paddingBottom="4dp" />

</com.mypackage.views.CustomRelativeLayout>

最佳答案

您是否尝试通过调用 setWillNotDraw 清除 WILL_NOT_DRAW 标志?自定义布局中的方法?

If this view doesn't do any drawing on its own, set this flag to allow further optimizations. By default, this flag is not set on View, but could be set on some View subclasses such as ViewGroup. Typically, if you override onDraw(android.graphics.Canvas) you should clear this flag.

关于android - 未在 ListView 中调用子类化的 RelativeLayout onDraw() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22642816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com