Android Studio(メモリストのアプリ04_表示テキストを短くする)
■表示テキストを限定する。
前回でチェックボックスの追加、削除ができた。チェックボックスに表示される文字列が長い場合に文字数を限定して表示させるよう修正したい。
少し調べてみると、setEllipsizeで省略ができるよう。Developersのサイトでは、「Causes words in the text that are longer than the view's width to be ellipsized instead of broken in the middle.」との説明があるので、Viewの幅を超えたものを省略するものだと思う。
下のコードを追加して実行すると下の画面のようになった(幅を分かりやすくするように色付けしている)。
cb1.setEllipsize(TextUtils.TruncateAt.END);
cb1.setSingleLine(true);
1行からはみ出す部分が「…」となっている。
チェックボックスにチェックを入れたら、setSingleLine(false) となるようにすると下のように変更される。
やりたいことはこんな感じだけど、文字の高さや幅を指定したい。setWidth で幅を指定できるはずだけど、これを設定しても有効になっていない。さらに調べると、LinearLayout の上にのせるものに設定しても幅などの指定ができないよう。
LinearLayout に似たものとしてListView というものがあったので、こちらでできないか調べ中。新しいプロジェクトで ListView を試してみる。
package com.example.sampleproject007_listview;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] strArray = {"車両", "パソコン", "テレビ"};
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strArray);
subAdapter01 adapter = new subAdapter01(this, android.R.layout.simple_list_item_1, strArray);
ListView listView = (ListView) findViewById(R.id.lv1);
listView.setAdapter(adapter);
}
}
下がArrayAdapterをサブクラスにしたもの。ListViewに入れるものをチェックボックスに変更している。
package com.example.sampleproject007_listview;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
public class subAdapter01 extends ArrayAdapter {
String[] strArray;
public subAdapter01(Context context, int resource, String[] Array) {
super(context, resource, Array);
strArray = Array;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CheckBox tv = new CheckBox(getContext());
tv.setBackgroundColor(Color.YELLOW);
tv.setText(strArray[position]);
tv.setWidth(20);
convertView = tv;
return convertView;
}
}
結果がこちら。幅の設定はやはり有効になっていないよう。設定の場所が違うのかな。
もう少し Layout について調べる。