我创建了一个应用程序,它在gridview中列出SD卡中的歌曲,但gridview单元格不是方形大小,我也想限制单元格中显示的文本不超过一行或15-20个字符.我尝试在这里提出一个问题,但是它不适用于我.它也限制了布局的高度.我该如何解决?
PlayListActivity.java:
public class PlayListActivity extends Activity {
private String[] mAudioPath;
private String[] mMusicList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_list);
GridView mListView = (GridView) findViewById(android.R.id.list);
mMusicList = getAudioList();
ArrayAdapter<String> mAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, mMusicList);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2,
long arg3) {
try {
Intent i= new Intent(PlayListActivity.this,Player.class);
i.putExtra("anything",arg2);
i.putExtra("whatever",mAudioPath);
startActivity(i);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
});
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
for (int j = 0; j < adapterView.getChildCount(); j++)
adapterView.getChildAt(j).setBackgroundColor(Color.TRANSPARENT);
// change the background color of the selected element
view.setBackgroundColor(Color.LTGRAY);
return true;
}
});
}
private String[] getAudioList() {
final Cursor mCursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA}, null, null,
"LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");
int count = mCursor.getCount();
String[] songs = new String[count];
mAudioPath = new String[count];
int i = 0;
if (mCursor.moveToFirst()) {
do {
songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
mAudioPath[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
i++;
} while (mCursor.moveToNext());
}
mCursor.close();
return songs;
}
}
MyLinearLayout.java:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
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
}
}
activity_play_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<com.example.dell_1.myapp3.MusicPlayer.MyLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_playlist" />
<GridView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:numColumns="2"
android:layout_height="match_parent"
android:divider="#242424"
android:dividerHeight="1dp"
/>
</com.example.dell_1.myapp3.MusicPlayer.MyLinearLayout>
This is the end result I am getting
最佳答案 您应该为此目的使用自定义适配器.
创建一个扩展ArrayAdapter的类,然后覆盖getView方法.在里面设置textView的行数:
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = (TextView) view.findViewById(android.R.id.text1);
textView.setLines(5);
return view;
}
之后使用这个新类而不是ArrayAdapter