Я пытаюсь удвоить ширину одного из моих столбцов в моем приложении, из фотографии ниже я хочу, чтобы 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,
"")
};
}