Android GridView Колонка двойной ширины - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь удвоить ширину одного из моих столбцов в моем приложении, из фотографии ниже я хочу, чтобы test1 охватил две ячейки, чтобы он заполнил точку test1 и test2 и подтолкнул test2 к следующей точке.

Я пробовал несколько разных способов сделать это, но кажется, что это легче сделать, когда все статично, чем с изменением информации.Я приложу весь мой код.Я знаю, что есть способ охвата, но он должен быть определен в xml, который, очевидно, не будет работать для меня, поскольку в моем коде из моего адаптера генерируются разные ячейки.

Я прикрепил весь кодниже.Я хочу, чтобы каждая отдельная ячейка была одинаковой ширины и высоты, за исключением того, что я хочу, чтобы ячейка 1 имела двойную ширину.

Спасибо

activity_main.xml

                    <GridView
                    android:id="@+id/gridview"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:columnWidth="120dp"
                    android:numColumns="auto_fit"
                    android:verticalSpacing="14dp"
                    android:stretchMode="spacingWidthUniform"
                    />

linearlayout_grid.xml

<example.MyLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="@color/reloadedpurple"
    android:elevation="6dp"
    >

    <TextView
        android:id="@+id/textview_book_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        tools:text=""
        android:textStyle="bold"
        android:paddingTop="4dp"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:gravity="center_horizontal"/>

    <TextView
        android:id="@+id/textview_book_author"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        tools:text=""
        android:gravity="center_horizontal"/>

</example.MyLinearLayout>

MyLinearLayout.java

public class MyLinearLayout extends LinearLayout {
    public MyLinearLayout(Context context) {
        super(context);
    }

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

    public MyLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, widthMeasureSpec); // This is the key that will make the height equivalent to its width
    }
}

GridAdapter.java

public class GridAdapter extends BaseAdapter {

    private final Context mContext;
    private final Book[] books;

    // 1
    public GridAdapter(Context context, Book[] books) {
        this.mContext = context;
        this.books = books;
    }

    // 2
    @Override
    public int getCount() {
        return books.length;
    }

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

    // 4
    @Override
    public Object getItem(int position) {
        return null;
    }

    // 5
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 1
        final Book book = books[position];

        // 2
        if (convertView == null) {
            final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
            convertView = layoutInflater.inflate(R.layout.linearlayout_grid, null);
        }

        // 3

        final TextView nameTextView = (TextView)convertView.findViewById(R.id.textview_book_name);
        final TextView authorTextView = (TextView)convertView.findViewById(R.id.textview_book_author);


        // 4
        nameTextView.setText(book.getName());
        authorTextView.setText(book.getAuthor());

        return convertView;
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            GridView gridView = (GridView)findViewById(R.id.gridview);
            GridAdapter gridAdapter = new GridAdapter(this, books);
            gridView.setAdapter(gridAdapter);
        }
        private Book[] books = {
                new Book("test1", "test1", R.drawable.ic_launcher_background,
                        ""),
                new Book("test2", "test2", R.drawable.ic_launcher_background,
                        ""),
                new Book("test3", "test3", R.drawable.ic_launcher_background,
                        ""),
                new Book("test4", "test4", R.drawable.ic_launcher_background,
                        "")

        };
    }
...