2017-10-07 15 views
4

グリッドビューのSDカードの曲をリストするアプリを作成しましたが、グリッドビューのセルは正方形ではありません。 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

答えて

1

この目的のためにカスタムアダプターを使用する必要があります。

ArrayAdapterを拡張するクラスを作成し、次にメソッドをオーバーライドします。内部のTextViewのラインの何が設定:代わりにArrayAdapter

0

のこの新しいクラスは、あなたのケースでは、その使用後

@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; 
} 

をあなたが持つ

songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); 

を交換する曲の名前の長さを制限することはできません

String songName = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); 
songs[i] = songName.substring(0, Math.min(songName.length(), 25)); 
//now 25 is the length of every songs name 

各曲の名前の長さが等しく、henc各セルのサイズは等しくなります。 しかし、私はあなたがTextView

<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="end" 
    android:maxLines="5"/> 
    //Setting max line of your text view to five and ... after that 

またはプログラム

your_text_view.setEllipsize(TextUtils.TruncateAt.END); 
your_text_view.setMaxLines(5); 
//Setting max line of your text view to five and ... after that 
あるアイテムのXMLファイルからそれを行うことができるようにカスタムアダプタを使用することをお勧め
関連する問題