왜이러지 ㅡㅡ;.jpg

그림과 같이 글씨가 잘리네요 ㅠㅠ

 

뭐 어떻게해도 크기를 조정할수없으니...

 

결국 CustomAdapter쓰는게 답인건가요..

 

안드로메다거 쓰면서 ListView에 글자 크기만큼 동적으로 늘어나라고 지정하는건 무리일가요 ?ㅠㅠ

이게 PresetSMSActivity 고요.

 
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.InputFilter;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class PresetSMSActivity extends Activity {
 private static final String TEXT_ENTRY_KEY = "TEXT_ENTRY_KEY";
 private static final String ADDING_ITEM_KEY = "ADDING_ITEM_KEY";
 private static final String SELECTED_INDEX_KEY = "SELECTED_INDEX_KEY";
 public static final String SMS_SAVE_TEXT1 = "SMS_SAVE_TEXT1";
 public static final String SMS_SAVE_TEXT2 = "SMS_SAVE_TEXT2";
 public static final String SMS_SAVE_TEXT3 = "SMS_SAVE_TEXT3";
 public static final String SMS_SAVE_TEXT4 = "SMS_SAVE_TEXT4";
 public static final String SMS_SAVE_TEXT5 = "SMS_SAVE_TEXT5";
 public static final String CHOICE_SEL = "CHOICE_SEL";
 private static final int REMOVE_TODO = Menu.FIRST + 1;
 private static final int CANCEL_REMOVE = Menu.FIRST + 2;
 private boolean addingNew = false;
 private static int cnt = 0;
 public static int choice_sel = 0;
 
 public ArrayList<String> items;
 ArrayAdapter<String> adapter;
 ListView MyListView;
 EditText MyEditText;
 Button bt;
 
 private int maxByte = 80;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.preset_message);
  items = new ArrayList<String>();
  
  int resID = android.R.layout.simple_list_item_single_choice;
  //int resID = R.layout.preset_message;
  adapter = new ArrayAdapter<String>(this, resID, items);
  
  bt = (Button)findViewById(R.id.addBt);
  MyEditText = (EditText)findViewById(R.id.myEditText);
  MyListView = (ListView)findViewById(R.id.preset_List);
  
  InputFilter[] filters = new InputFilter[]{new ByteLengthFilter(maxByte, "euc-kr")};
  MyEditText.setFilters(filters);
  
    
  // listView의 항목을 선택하려면 체크박스나 라디오 버튼이 있어야 하므로 아래의 레이아웃을 선택했다.
  MyListView.setAdapter(adapter);
  // 위 Adapter의 레이아웃이 single이기 때문에 listview의 선택모드도 CHOICE_MODE_SINGLE이여야 한다.
  MyListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); // 하나의 항목만 선택 가능
    
  if(cnt == 0){
   SharedPreferences uiState = getPreferences(0);
   SharedPreferences.Editor editor = uiState.edit();
   
   editor.putString(SMS_SAVE_TEXT1, "지금은 연락을 받을수 없습니다. 나중에 다시 확인후 연락하겠습니다.");
   editor.putInt(CHOICE_SEL, 0);
   editor.commit();
   cnt++;
  }
  registerForContextMenu(MyListView);
  restoreUIState();
  
  
  bt.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if(MyEditText.getVisibility() == View.GONE){
     if(cnt == 5){
      AlertDialog_SMS();
     }
     else{
      MyEditText.setVisibility(View.VISIBLE);
     }
    }
    else{
     addingNew = true;
     String newItem = MyEditText.getText().toString();
     if(newItem.toString().replaceAll(" ", "").replaceAll("\n", "") == ""){
      AlertDialog_SMS();
     }else{
      items.add(0, newItem);
      MyEditText.setText("");
      adapter.notifyDataSetChanged();
      cancelAdd();
      MyEditText.setVisibility(View.GONE);
      cnt++;
      Toast.makeText(getApplicationContext(), "등록 완료!", Toast.LENGTH_SHORT).show();
      addingNew = false;
      Log.i("cnt count = ", ""+cnt);
      MyListView.setItemChecked(0, true);
     }
    }
   }
  });
  
 }
 
 public void AlertDialog_SMS(){
  if(addingNew){
   new AlertDialog.Builder(this).setTitle("오류!")
   .setMessage("텍스트를 입력해주세요!!!")
   .setNeutralButton("확인", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
     // TODO Auto-generated method stub    
    }
   }).show();
  }else{
   new AlertDialog.Builder(this).setTitle("오류!")
   .setMessage("최대 5개까지만 입력 가능합니다!!!")
   .setNeutralButton("확인", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
     // TODO Auto-generated method stub    
    }
   }).show();
  }
 }
 
 private void restoreUIState() {
  Log.i("restoreUIState()", "Start");
  // 액티비티 환경설정 객체를 얻어온다.
  SharedPreferences settings = getPreferences(Activity.MODE_WORLD_READABLE);
  // UI 상태 값들을 읽어온다.
  // 기본 값으로 쓰일 값들도 지정한다.
  String text = settings.getString(TEXT_ENTRY_KEY, "");
  Boolean adding = settings.getBoolean(ADDING_ITEM_KEY, false);
  int count = settings.getInt(null, cnt);
  
  setResult(count);
  Log.i("cnt값", ""+cnt);
  // UI를 이전 상태로 복구한다.
  if (adding) {
   addNewItem();
   MyEditText.setText(text);
  }
  String ListText;
  if(cnt >= 1){
   for(int i = cnt-1 ; i >= 0 ; i --){
    if(i == 0){
     ListText = settings.getString(SMS_SAVE_TEXT1, "");
     String newItem = ListText;
     items.add(0, newItem);     
     adapter.notifyDataSetChanged();
     Log.i("i", ""+i);
     Log.i("SMS_SAVE_TEXT1", ListText);
    }else if(i == 1){
     ListText = settings.getString(SMS_SAVE_TEXT2, "");
     String newItem = ListText;
     items.add(0, newItem);     
     adapter.notifyDataSetChanged();
     Log.i("i", ""+i);
     Log.i("SMS_SAVE_TEXT2", ListText);
    }else if(i == 2){
     ListText = settings.getString(SMS_SAVE_TEXT3, "");
     String newItem = ListText;
     items.add(0, newItem);     
     adapter.notifyDataSetChanged();
     Log.i("i", ""+i);
     Log.i("SMS_SAVE_TEXT3", ListText);
    }else if(i == 3){
     ListText = settings.getString(SMS_SAVE_TEXT4, "");
     String newItem = ListText;
     items.add(0, newItem);     
     adapter.notifyDataSetChanged();
     Log.i("i", ""+i);
     Log.i("SMS_SAVE_TEXT4", ListText);
    }else if(i == 4){
     ListText = settings.getString(SMS_SAVE_TEXT5, "");
     String newItem = ListText;
     items.add(0, newItem);     
     adapter.notifyDataSetChanged();
     Log.i("i", ""+i);
     Log.i("SMS_SAVE_TEXT5", ListText);
    }
   }
  }
  choice_sel = settings.getInt(CHOICE_SEL, 0);
  MyListView.setItemChecked(choice_sel, true);
 }
 @Override
 protected void onPause(){
  super.onPause();
  // 액티비티 환경설정 객체를 얻어온다.
  SharedPreferences uiState = getPreferences(0);
  // 환경설정 에디터를 얻어온다.
  SharedPreferences.Editor editor = uiState.edit();
  // UI 상태 환경설정 값들을 추가한다.
  editor.putString(TEXT_ENTRY_KEY, MyEditText.getText().toString());
  editor.putBoolean(ADDING_ITEM_KEY, addingNew);
  choice_sel = MyListView.getCheckedItemPosition();
  editor.putInt(CHOICE_SEL, choice_sel);
  editor.putInt("cnt", cnt);
  Log.i("cnt값", ""+cnt);
  
  for(int i = 0 ; i < cnt ; i ++){
   String tmp = (String)items.get(i).toString();
   if(i == 0){
    editor.putString(SMS_SAVE_TEXT1,tmp);
    Log.i("SMS_SAVE_TEXT1",tmp);
   }else if(i == 1){
    editor.putString(SMS_SAVE_TEXT2,tmp);
    Log.i("SMS_SAVE_TEXT2",tmp);
   }else if(i == 2){
    editor.putString(SMS_SAVE_TEXT3,tmp);
    Log.i("SMS_SAVE_TEXT3",tmp);
   }else if(i == 3){
    editor.putString(SMS_SAVE_TEXT4,tmp);
    Log.i("SMS_SAVE_TEXT4",tmp);
   }else if(i == 4){
    editor.putString(SMS_SAVE_TEXT5,tmp);
    Log.i("SMS_SAVE_TEXT5",tmp);
   }
  }
  Log.i("cnt", ""+cnt);
  // 변경된 내용을 적용한다.
  editor.commit();
 }
 @Override
 public void onSaveInstanceState(Bundle savedInstanceState) {
  savedInstanceState.putInt(SELECTED_INDEX_KEY, MyListView.getSelectedItemPosition());
  super.onSaveInstanceState(savedInstanceState);
 }
 @Override
 public void onRestoreInstanceState(Bundle savedInstanceState) {
  int pos = -1;
  if (savedInstanceState != null)
   if (savedInstanceState.containsKey(SELECTED_INDEX_KEY))
    pos = savedInstanceState.getInt(SELECTED_INDEX_KEY, -1);
  MyListView.setSelection(pos);
 }
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  if(cnt < 2){
   Toast.makeText(getApplicationContext(), "최소 1개이상의 SMS 내용이 추가되어있어야 합니다.", Toast.LENGTH_SHORT).show();
  }else{
   menu.setHeaderTitle("삭제 확인");
   menu.add(0, REMOVE_TODO, Menu.NONE, "삭제");
   menu.add(1, CANCEL_REMOVE, Menu.NONE, "취소");
  }
 }
 @Override
 public boolean onContextItemSelected(MenuItem item) {
  super.onContextItemSelected(item);
  switch (item.getItemId()) {
  case (REMOVE_TODO): {
   AdapterView.AdapterContextMenuInfo menuInfo;
   menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
   int index = menuInfo.position;
   removeItem(index);
   cnt--;
   Log.i("cnt count = ", ""+cnt);
   return true;
  }
  }
  return false;
 }
 private void cancelAdd() {
  addingNew = false;
  MyEditText.setVisibility(View.GONE);
 }
 private void addNewItem() {
  addingNew = true;
  MyEditText.setVisibility(View.VISIBLE);
  MyEditText.requestFocus();
 }
 private void removeItem(int _index) {
  items.remove(_index);
  adapter.notifyDataSetChanged();
  if(choice_sel <= MyListView.getChildCount()){
   MyListView.setItemChecked(choice_sel, true);
  }else{
   MyListView.setItemChecked(0, true);
  }
 }
}

이게 preset_message.xml 입니다.

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android">
 <EditText
  android:id="@+id/myEditText"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentTop="true"
  android:visibility="gone">
 </EditText>
 <ListView
  android:id="@+id/preset_List"
  android:choiceMode="singleChoice"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:layout_above="@+id/addBt"
  android:layout_below="@+id/myEditText">
 </ListView>
 <Button
  android:id="@+id/addBt"
  android:layout_alignParentBottom="true"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="안내 SMS 내용 추가"
  android:gravity="center">
 </Button>
</RelativeLayout>