strings.xml 파일에 문자열 서식을 지정하여 ArrayList에 저장되어 있는 문자열들을 TextView에 출력하는 예제입니다.
앱의 레이아웃은 TextView만 있는 간단한 구조입니다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" tools:context=".MainActivity">
<TextView android:id="@+id/textview_main_list" android:layout_width="match_parent" android:layout_height="match_parent" android:text=""/>
</LinearLayout> |
우선 임의로 ArrayList에 다음처럼 데이터를 입력했습니다.
for (int i = 0; i < 20; i++) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(TAG_ID, "id " + i); hashMap.put(TAG_NAME, "name " + i); hashMap.put(TAG_ADDRESS, "address " + i);
mArrayList.add(hashMap); } |
strings.xml 파일에서 다음처럼 TextView에 출력할 문자열의 서식을 지정해줍니다.
%d는 자바코드의 String.format 메소드의 인자로 넘겨지는 몇 번째 값을을 가져올지 지정해주는 것입니다.
$s는 문자열을 출력하겠다는 의미이고 $20s의 의미는 문자열 출력시 앞에 공백을 추가해주는 것입니다.
<string name="textview_message" formatted="false">%1$20s %2$20s %3$20s \n</string> |
ArrayList에 저장되어 있는 데이터를 가져온 후, String.format 메소드에 첫번째 인자는 서식을 지정한 문자열 리소스, 두번째 이후로는 출력할 데이터를 적어줍니다.
String.format에 의해서 만들어진 문자열 str을 TextView에 넣어줍니다.
for (int i = 0; i < 20; i++) {
HashMap<String, String> outputHashMap = mArrayList.get(i); String id = outputHashMap.get("id"); String name = outputHashMap.get("name"); String address = outputHashMap.get("address");
String str = String.format(getResources().getString(R.string.textview_message), id, name, address); mTextView.append(str); } |
실행 결과입니다.
예상한 것처럼 문자열이 정렬이 되지는 않네요..
사용한 전체 코드입니다.
package com.tistory.webnautes.displaystringsofarraylisttotextview;
import android.content.res.Resources; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView;
import java.util.ArrayList; import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
private static final String TAG_ID = "id"; private static final String TAG_NAME = "name"; private static final String TAG_ADDRESS ="address";
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); TextView mTextView = (TextView) findViewById(R.id.textview_main_list); ArrayList<HashMap<String, String>> mArrayList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(TAG_ID, "id " + i); hashMap.put(TAG_NAME, "name " + i); hashMap.put(TAG_ADDRESS, "address " + i);
mArrayList.add(hashMap); }
for (int i = 0; i < 20; i++) {
HashMap<String, String> outputHashMap = mArrayList.get(i); String id = outputHashMap.get("id"); String name = outputHashMap.get("name"); String address = outputHashMap.get("address");
String str = String.format(getResources() .getString(R.string.textview_message), id, name, address); mTextView.append(str); }
} }
|
참고
https://developer.android.com/guide/topics/resources/string-resource.html?hl=ko
http://blog.devez.net/100