是否可以在GridView中以垂直方向加载项目?我的意思是......
正常情况 - 3列
-----------------------------
1 | 2 | 3
-----------------------------
4 | 5 | 6
所需情况 - 3栏
-----------------------------
1 | 3 | 5
-----------------------------
2 | 4 | 6
提前致谢!
答案 0 :(得分:3)
我认为这根本不可能。
原因 ::
我对此做了一些工作并得出了这个结论。希望这可以回答未回答的问题。
答案 1 :(得分:1)
如果您使用GridLayoutManager与RecyclerView,首先填写垂直数据的简便方法是:
GridLayoutManager lLayout_artist = new GridLayoutManager(getActivity(),3,GridLayoutManager.HORIZONTAL, false);
您可以根据需要更改GridLayoutManager的方向。
答案 2 :(得分:0)
请澄清,说你有这样的网格
1 4 7
2 5 8
3 6 9
现在如果你垂直向下滚动,它应该基本上就像这样?
2 5 8
3 6 9
4 7 10
在这种情况下,
显然,这不是正常的ListView / GridView如何在一次回收行的情况下工作的方式,AFAIK您需要自定义GridView才能获得此功能。
答案 3 :(得分:0)
是否可以更改数据序列? 在您的示例中,将数据更改为[1,3,5,2,4,6,...]以获得水平方向,[1,5,2,6,3,7,4,8,...]垂直方向。
答案 4 :(得分:0)
//你曾经使用过GridLayout this,试试这个:
File -> Import -> <sdk_folder>\extras\android\support\v7\gridlayout>
//将此项目添加为库项目
// xml文件 - activity_main.xml
<android.support.v7.widget.GridLayout 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:id="@+id/gridLayout"
tools:context="com.example.gridlayoutdemo.MainActivity" >
</android.support.v7.widget.GridLayout>
// Java代码
<强> MainActivity.class 强>
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.GridLayout;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private GridLayout gridLayout;
private TextView[] textViews;
private int noOfItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridLayout = (GridLayout) findViewById(R.id.gridLayout);
gridLayout.setOrientation(1);
gridLayout.setColumnCount(3);
gridLayout.setRowCount(3);
textViews = new TextView[8];
for (int i = 0; i < 8; i++) {
textViews[i] = new TextView(MainActivity.this);
textViews[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
textViews[i].setText(String.valueOf(i));
textViews[i].setTextSize(25);
textViews[i].setPadding(50, 25, 10, 25);
gridLayout.addView(textViews[i]);
}
setContentView(gridLayout);
for (noOfItems = 0; noOfItems < 8; noOfItems++) {
textViews[noOfItems].setOnClickListener(new View.OnClickListener() {
int pos = noOfItems;
public void onClick(View v) {
Toast.makeText(getBaseContext(), pos + " Clicked",
Toast.LENGTH_SHORT).show();
}
});
}
}
}
//如果你想水平显示 gridLayout.setOrientation(0);
答案 5 :(得分:0)
我认为你需要https://github.com/ApmeM/android-flowlayout。并将儿童引力设置为Gravity.FILL_HORIZONTAL
他们甚至有vertical
或horizontal
方向
答案 6 :(得分:0)
我知道这个问题有点老了..但我没有找到任何相关的答案,所以我创建了一个算法。
在下面的代码中,crossAxisCount
只不过是水平对齐的网格数量,即,在上图中的纵向视图中,我们有“2”个网格,而在横向视图中,我们有“4”个网格。
arrayLength
表示为获得该布局而必须提供的网格总数。
final int crossAxisCount = 2;
final int arrayLength = 8;
final List<int> output = [];
var runiCheck = 0;
for (var i = 0; i < (arrayLength/ crossAxisCount).ceil(); i++) {
var runjCheck = -1;
for(var j = i; j <= arrayLength; j+= (arrayLength / crossAxisCount).ceil()){
runiCheck++;
if((arrayLength % crossAxisCount != 0)){
if(arrayLength < runiCheck) break;
runjCheck++;
if(arrayLength % crossAxisCount < runjCheck){
j--;
}
}else{
runjCheck++;
if(runjCheck >= crossAxisCount) break;
}
output.add(j);
}
}
print(output);
输出:
[
0, 4,
1, 5,
2, 6,
3, 7
]
如果我们将 crossAxisCount
改为 4
并将 arrayLength
改为 21
(只是一个随机数。)
final int crossAxisCount = 4;
final int arrayLength = 21;
final List<int> output = [];
输出将是:
[
0, 6, 11, 16,
1, 7, 12, 17,
2, 8, 13, 18,
3, 9, 14, 19,
4, 10, 15, 20,
5
]
我知道在很长的列表/数组中使用这个算法有点贵。但这是正确的解决方案。
我是 Stack Overflow 的新手,请为我的答案投票以获得动力。
答案 7 :(得分:-1)
您可以使用 GridLayout 代替GridView来实现此目的。
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:rowCount="2">
</GridLayout>