[英]How to make cells of GridView Scrollable?
我正在使用Android應用程序,並且使用gridview來顯示文本。 某些文本條目可能很大,因此, 我想使gridview的單元格可滾動。
我知道如何使TextView可滾動,您只需設置
android:scrollbars = "vertical"
xml文件中TextView的屬性並使用
yourTextView.setMovementMethod(new ScrollingMovementMethod());
在您的代碼中。
GridView的每個單元格的xml文件是這樣的:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/grid_cell_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center_vertical|center_horizontal"
android:text="TextView"
android:scrollbars = "vertical"/>
</RelativeLayout>
GridView的Adapter中的getView()方法是這樣的:
public View getView(int position, View convertView, ViewGroup parent) {
final String a = listStorage.get(position);
// view holder pattern
if (convertView == null) {
final LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(R.layout.grid_cell, parent, false);
TextView text = (TextView) convertView.findViewById(R.id.grid_cell_text);
final ViewHolder viewHolder = new ViewHolder(text);
convertView.setTag(viewHolder);
}
final ViewHolder viewHolder = (ViewHolder)convertView.getTag();
viewHolder.text.setText(a);
viewHolder.text.setTextColor(Color.WHITE);
// Set height and width constraints for the text view
viewHolder.text.setLayoutParams(new RelativeLayout.LayoutParams(GridView.AUTO_FIT, dp_to_px(40)));
return convertView;
}
因此,我認為所需要做的就是為GridView單元格的xml文件中的TextView設置與上述相同的屬性,並在Adapter的getView()中使用setMovementMethod(),但它不起作用。
有任何想法嗎?
非常感謝。
編輯:
這是適配器的完整代碼:
public class CustomAdapter extends BaseAdapter {
private LayoutInflater layoutinflater;
private List<String> listStorage;
private Context context;
String msg = "drag";
Resources r;
public CustomAdapter(Context context, List<String> customizedListView, Resources r) {
this.context = context;
layoutinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listStorage = customizedListView;
this.r = r;
}
@Override
public int getCount() {
return listStorage.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String a = listStorage.get(position);
// view holder pattern
if (convertView == null) {
final LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(R.layout.grid_cell, null);
final TextView text = (TextView) convertView.findViewById(R.id.grid_cell_text);
final ViewHolder viewHolder = new ViewHolder(text);
convertView.setTag(viewHolder);
}
final ViewHolder viewHolder = (ViewHolder)convertView.getTag();
viewHolder.text.setText(a);
viewHolder.text.setLayoutParams(new RelativeLayout.LayoutParams(GridView.AUTO_FIT, dp_to_px(40)));
return convertView;
}
// Your "view holder" that holds references to each subview
private class ViewHolder {
private final TextView text;
public ViewHolder(TextView text) {
this.text = text;
}
}
public int dp_to_px(int dp){
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics());
return px;
}
}
以及GridView的ClickListener的代碼:
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.d(msg, "Click!");
}
});
把你的細胞變成這個
<ScrollView
android:id="@+id/scrollView"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/grid_cell_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center_vertical|center_horizontal"
android:text="TextView"
android:scrollbars = "vertical"/>
</RelativeLayout>
</ScrollView>
編輯:將您的適配器更改為此:文本正在滾動並且它是可單擊的。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final String a = listStorage.get(position);
// view holder pattern
if (convertView == null) {
final LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(R.layout.grid_cell, null);
final TextView text = (TextView) convertView.findViewById(R.id.grid_cell_text);
ScrollView scrollView = (ScrollView) convertView.findViewById(R.id.scrollView);
final ViewHolder viewHolder = new ViewHolder(text, scrollView);
convertView.setTag(viewHolder);
}
final ViewHolder viewHolder = (ViewHolder)convertView.getTag();
viewHolder.text.setText(a);
viewHolder.scrollView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, dp_to_px(60)));
viewHolder.text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("CLICKITEM", String.valueOf(position));
}
});
return convertView;
}
// Your "view holder" that holds references to each subview
private class ViewHolder {
private final TextView text;
private final ScrollView scrollView;
public ViewHolder(TextView text,ScrollView scrollView) {
this.text = text;
this.scrollView = scrollView;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.