当前位置: 首页 > 知识库问答 >
问题:

是否为GridView中的分隔器提供不同的颜色?

齐承运
2023-03-14
    <*************.AutoGridView
        android:id="@+id/dashMenu"
        android:layout_width="match_parent"
        android:layout_height="210dp"
        android:layout_alignParentBottom="true"
        android:background="@android:color/transparent"
        android:horizontalSpacing="1dp"
        android:numColumns="@integer/grid_columns"
        android:scrollbars="none"
        android:stretchMode="columnWidth"
        android:verticalSpacing="1dp"
        android:visibility="visible" />
  <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:id="@+id/menuWrapper"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="12dp"
        tools:ignore="UseCompoundDrawables">

        <ImageView
            android:id="@+id/menuImg"
            android:layout_width="58dp"
            android:layout_height="58dp"
            android:padding="8dp"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/menuLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="@font/montserrat_regular"
            android:gravity="center_horizontal"
            android:paddingBottom="6dp"
            android:text="Menu Item"
            android:textColor="@color/white"
            android:textSize="12sp" />


    </LinearLayout>


</RelativeLayout>
public class HomeMenuAdapter extends BaseAdapter {

    private Context mContext;
    private ArrayList<Menu> menus;

    public HomeMenuAdapter(Context context, ArrayList<Menu> menus) {
        mContext = context;
        this.menus = menus;
    }

    @Override
    public int getCount() {
        return menus.size();
    }

    @Override
    public Menu getItem(int position) {
        return menus.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        Menu menu = menus.get(position);

        ImageView menuImage;
        TextView menuLabel;

        View v;

        if (convertView == null) {
            v = layoutInflater.inflate(R.layout.dash_menu_item, null);
        } else {
            v = convertView;
        }

        /*int columns = 3;
        int total = menus.size();
        int rows = total / columns;

        LinearLayout menuWrapper = v.findViewById(R.id.menuWrapper);
        if (((position + 1) % columns) == 0) {
            if((total - position) > columns ) {
                CommonUtils.setDrawableBackground(mContext, menuWrapper, R.drawable.menu_border_bottom);
            } else {
                CommonUtils.setDrawableBackground(mContext, menuWrapper, R.drawable.menu_border_neutral);
            }
        } else if((total - position) > columns ) {
                CommonUtils.setDrawableBackground(mContext, menuWrapper, R.drawable.menu_border_right_bottom);
        } else {
            CommonUtils.setDrawableBackground(mContext, menuWrapper, R.drawable.menu_border_right);
        }
*/


        menuImage = v.findViewById(R.id.menuImg);
        menuLabel = v.findViewById(R.id.menuLabel);

        if(menu.getIcon() != null && !TextUtils.isEmpty(menu.getIcon()) &&
                URLUtil.isValidUrl(menu.getIcon())) {
            RequestOptions requestOptions = new RequestOptions();
            requestOptions.error(menu.getIconId());
            Glide.with(menuImage).applyDefaultRequestOptions(requestOptions)
                    .load(menu.getIcon()).into(menuImage);

        } else if(menu.getIconId() != 0) {
            setImage(menuImage, menu.getIconId());
        }
        menuLabel.setText(menu.getName());

        v.setOnClickListener(new OnOneClickListener() {
            @Override
            public void onOneClick(View v) {
                new Router(mContext).route(menu);
            }
        });

        return v;
    }

    private void setImage(ImageView menuImage, int iconId) {
        menuImage.setImageDrawable(mContext.getResources().getDrawable(
                iconId));
    }
}

自动网格视图

public class AutoGridView extends GridView {

    private static final String TAG = "AutoGridView";
    private int numColumnsID;
    private int previousFirstVisible;
    private int numColumns = 1;

    public AutoGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs);
    }

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

    public AutoGridView(Context context) {
        super(context);
    }

    /**
     * Sets the numColumns based on the attributeset
     */
    private void init(AttributeSet attrs) {
        // Read numColumns out of the AttributeSet
        int count = attrs.getAttributeCount();
        if(count > 0) {
            for(int i = 0; i < count; i++) {
                String name = attrs.getAttributeName(i);
                if(name != null && name.equals("numColumns")) {
                    // Update columns
                    this.numColumnsID = attrs.getAttributeResourceValue(i, 1);
                    updateColumns();
                    break;
                }
            }
        }
        Log.d(TAG, "numColumns set to: " + numColumns);
    }


    /**
     * Reads the amount of columns from the resource file and
     * updates the "numColumns" variable
     */
    private void updateColumns() {
        this.numColumns = getContext().getResources().getInteger(numColumnsID);
    }

    @Override
    public void setNumColumns(int numColumns) {
        this.numColumns = numColumns;
        super.setNumColumns(numColumns);

        Log.d(TAG, "setSelection --> " + previousFirstVisible);
        setSelection(previousFirstVisible);
    }

    @Override
    protected void onLayout(boolean changed, int leftPos, int topPos, int rightPos, int bottomPos) {
        super.onLayout(changed, leftPos, topPos, rightPos, bottomPos);
        setHeights();
    }

    @Override
    protected void onConfigurationChanged(Configuration newConfig) {
        updateColumns();
        setNumColumns(this.numColumns);
    }

    @Override
    protected void onScrollChanged(int newHorizontal, int newVertical, int oldHorizontal, int oldVertical) {
        // Check if the first visible position has changed due to this scroll
        int firstVisible = getFirstVisiblePosition();
        if(previousFirstVisible != firstVisible) {
            // Update position, and update heights
            previousFirstVisible = firstVisible;
            setHeights();
        }

        super.onScrollChanged(newHorizontal, newVertical, oldHorizontal, oldVertical);
    }

    /**
     * Sets the height of each view in a row equal to the height of the tallest view in this row.
     */
    private void setHeights() {
        ListAdapter adapter = getAdapter();

        if(adapter != null) {
            for(int i = 0; i < getChildCount(); i+=numColumns) {
                // Determine the maximum height for this row
                int maxHeight = 0;
                for(int j = i; j < i+numColumns; j++) {
                    View view = getChildAt(j);
                    if(view != null && view.getHeight() > maxHeight) {
                        maxHeight = view.getHeight();
                    }
                }
                //Log.d(TAG, "Max height for row #" + i/numColumns + ": " + maxHeight);

                // Set max height for each element in this row
                if(maxHeight > 0) {
                    for(int j = i; j < i+numColumns; j++) {
                        View view = getChildAt(j);
                        if(view != null && view.getHeight() != maxHeight) {
                            view.setMinimumHeight(maxHeight);
                        }
                    }
                }
            }
        }
    }


}

不要建议添加额外的视图(请)。

共有1个答案

舒飞捷
2023-03-14

请参阅

如何在Android RecolyerView中添加分隔线?

您必须根据需要更改项目装饰器颜色

 类似资料:
  • 有没有办法在gridview中显示行之间的(水平)分隔线? 我试着在每个网格项目下面放置一个小的分隔线,但是这不是一个解决方案,因为当一行没有完全填满项目时,它不会跨越整行。 有没有办法在每一行之间添加一个图像?我只能找到改变行之间空间的方法。

  • 问题内容: 我知道您可以通过将节点的样式设置为来设置整个textArea / Field的颜色,但是有一种方法可以设置单个行而不是所有行的颜色,同时仍然保持textArea / Field可编辑? 问题答案: JavaFX的/ 不支持该功能。您可以将RichTextFX用于作业:

  • 现在,我有下面的代码,它只是测试标准库中的< code>std::set_difference: 当我用Clang/GCC编译它时,我得到了输出: 更新我想实际使用的源代码案例(假设是我将要做的一些操作。因此,这些操作将按的顺序发生): 好吧,这看起来不错,它实际上对应于标准::set_difference,检查链接:但是当我选择MSVC时,我得到了不同的输出(检查链接:https://godbo

  • 我想在WebLogic web控制台上为不同的环境使用不同的颜色。例如,我想用红色表示生产域,用绿色表示开发域,等等。 甲骨文称之为“重塑品牌”。我遵循了这个复杂的指令,但它对我不起作用。可能是因为我的WebLogic版本更新了。 我也遵循了这个和那个文档,但它们也不适用于我。 有没有办法改变web控制台的颜色?

  • 问题内容: 给定相同的主要版本,例如Java 7,不同的Java编译器(例如Oracle的热点,JRockit或IBM的J9等)是否将给定的Java源代码文件编译为相同的bytcode? 扫描Java 7语言规范 ,似乎正在讨论的是语言的语义,而不是代码到字节码的转换。 YES 。 以上摘录为: JLS留下了许多实现细节,因一个实现而异。 和 但是,JLS没有指定从源代码到生成的字节码的1:1映射

  • 我将json传递给ObjectMapper。JSON字符串如下所示: 我的类如下所示: 这种行为是意料之中的吗?如果是,有什么解决办法? 更新:添加了类描述。