검색결과 리스트
분류 전체보기에 해당되는 글 253건
- 2011.12.20 [Android] Spinner
- 2011.12.20 [Android] AdapterView - 3
- 2011.12.19 [Android] AdapterView - 2
- 2011.12.19 [Android] AdapterView - 1
- 2011.12.19 [Android] TextView
- 2011.12.16 [Android] 대체 Resource
- 2011.12.16 [Android] Style&Theme
- 2011.12.16 [Android] Resource
- 2011.12.16 [Android] ContextMenu
- 2011.12.16 [Android] CheckMenu
글
리스트 같은 경우는 한번에 다 나타나는 케이스지만 이것은 클릭을 하면 팝업 형태로 주르륵 나타난다.
모바일 같이 협소한 공간에선 유용한 것이다.
xml
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:id="@+id/text"
android:text="select"
/>
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner"
/>
java
ArrayAdapter<CharSequence> arr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner)findViewById(R.id.spinner);
spinner.setPrompt("Select");
arr = ArrayAdapter.createFromResource(this, R.array.array, android.R.layout.simple_spinner_item);
arr.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(arr);
spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
public void onItemSelected(AdapterView<?> parent, View view, int index, long id){
Toast.makeText(ImageViewActivity.this, arr.getItem(index), Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parent){
}
});
}
실행을 하기 전에 하나 짚고 가자면 array xml을 꼭 생성하고 어댑터에 리소스를 연결 하는 것이 중요하다.
물론 사후 관리를 위해서이다.
설정
트랙백
댓글
글
커스텀 항목 뷰는 원하는 항목 배치에 좋다.
먼저 커스텀 레이아웃을 작성한다.
mail.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:id="@+id/text"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="test"
android:layout_alignParentRight="true"
/>
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/list"
/>
</RelativeLayout>
Item 클래스
public class Item {
String _name;
public Item(String name){
this._name = name;
}
}
Adapter 클래스
class ListAdapter extends BaseAdapter{
Context _main;
LayoutInflater _inflater;
ArrayList<Item> _item;
int _layout;
public ListAdapter(Context context, int layout, ArrayList<Item> arr){
this._main=context;
this._inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this._layout=layout;
this._item=arr;
}
public int getCount(){
return this._item.size();
}
public String getItem(int index){
return this._item.get(index)._name;
}
public long getItemId(int index){
return index;
}
public View getView(int index, View view, ViewGroup parent){
final int idx = index;
if(view==null){
view = this._inflater.inflate(this._layout,parent,false);
}
TextView txtview = (TextView)view.findViewById(R.id.text);
txtview.setText(this._item.get(idx)._name);
Button btn = (Button)view.findViewById(R.id.btn);
btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
String str = _item.get(idx)._name;
Toast.makeText(_main, str, Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
메인 클래스
public class ImageViewActivity extends Activity{
ArrayList<Item> arr;
ListView list ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
arr = new ArrayList<Item>();
Item item;
item = new Item("first");
arr.add(item);
item = new Item("second");
arr.add(item);
item = new Item("third");
arr.add(item);
ListAdapter adapter = new ListAdapter(this,R.layout.main,arr);
ListView list;
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
}
}
실행을 하면 어댑터를 통하여 제어를 하는 것이 확인 가능하다.
설정
트랙백
댓글
글
다음은 리스트 뷰를 입력에 따라 추가 삭제 하는 내용이다.
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<EditText
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4"
/>
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="add"
/>
<Button
android:id="@+id/del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="delete"
/>
</LinearLayout>
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
java 코드
ArrayList<String> arr;
ArrayAdapter<String> adapter;
ListView list ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
arr = new ArrayList<String>();
arr.add("first");
arr.add("second");
arr.add("third");
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,arr);
list = (ListView)findViewById(R.id.list);
list.setAdapter(adapter);
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
list.setDivider(new ColorDrawable(0xffffff00));
list.setDividerHeight(2);
list.setOnItemClickListener(i_listener);
findViewById(R.id.add).setOnClickListener(b_listener);
findViewById(R.id.del).setOnClickListener(b_listener);
}
AdapterView.OnItemClickListener i_listener = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View view, int position, long id){
Toast.makeText(ImageViewActivity.this, "Select : " + arr.get(position), Toast.LENGTH_SHORT);
}
};
Button.OnClickListener b_listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText ed = (EditText)findViewById(R.id.text);
switch(v.getId())
{
case R.id.add:
String text = ed.getText().toString();
if(text.length()!=0)
{
arr.add(text);
ed.setText("");
adapter.notifyDataSetChanged();
}
break;
case R.id.del:
int id = list.getCheckedItemPosition();
if(id!=ListView.INVALID_POSITION)
{
arr.remove(id);
list.clearChoices();
adapter.notifyDataSetChanged();
}
break;
}
}
};
여기에서 지금 SINGLE_CHOICE 로 된 것을 MULTIPLE_CHOICE 로 바꿔주면 한거번에 다수를 지울 수도 있다.
설정
트랙백
댓글
글
이들은 여러개의 차일드 뷰를 가질 수도 있으며 터치나 키패드로 항목을 선택 할 수도 있다.
먼저 리스트 뷰를 보면 xml 파일을 다음과 같이 작성한다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
그리고 자바 파일은 다음과 같다.
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<String> arr = new ArrayList<String>();
arr.add("1");
arr.add("2");
arr.add("3");
arr.add("4");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr);
ListView list = (ListView)findViewById(R.id.list);
list.setAdapter(adapter);
}
행여 혹시나 ArrayList가 어떤 것을 import 해야할지 모르는 사람들을 위해 한마디. java.util 을 import 하면 된다.
여기에서 보면 먼저 데이터를 형성하고 그 다음 어댑터를 준비, 다음으로 연결 했다. 어댑터의 속성은 다음과 같다.
첫번째 인자는 현재 액티비티. 그 다음은 리소스 아이디, 마지막으로 생성된 데이터다. 마지막 인자는 배열 형태로도 넣을 수 있다.
리소스 아이디를 살펴보면 다음과 같다.
리소스 아이디 | 설명 |
simple_list_item_1 | 하나의 텍스트 뷰 |
simple_list_item_2 | 두개의 텍스트 뷰 |
simple_list_item_check | 오른쪽에 체크 표시 |
simple_list_item_single_choice | 오른쪽에 라디오 버튼 표시 |
simple_list_item_multiple_choice | 오른쪽에 체크 버튼 표시 |
하지만 이런 형식으로 데이터를 입력 하는 것보다 리소스에 정의 해서 쓰는 것이 좋다.
리소스 파일을 생성해서 10개의 데이터를 넣어보자.
arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name ="array">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
</string-array>
</resources>
java 파일에서는 어댑터를 다음과 같이 써 주면 된다.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.array,android.R.layout.simple_list_item_1);
리스트 뷰에는 다음과 같은 속성들이 존재한다.
속성 | 인자 | 설명 |
none | CHOICE_MODE_NONE | 항목 선택 못함 |
singleChoice | CHOICE_MODE_SINGLE | 하나의 항목 선택 |
multipleChoice | CHOICE_MODE__MULTIPLE | 복수의 항목 선택 |
java 코드에서 다음과 같은 코드를 추가하고 실행해보면 변화를 알 수가 있을 것이다.
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
list.setDivider(new ColorDrawable(0xffffff00));
list.setDividerHeight(2);
설정
트랙백
댓글
글
버튼과 에디트 텍스트는 이를 상속받아서 그 기능을 쓰기 때문에 거의 동일한 속성들을 이용 할 수 있다.
각 속성에서 보면 에디트 텍스트에는 scrollHorizontally 라는 속성이 있다. 이것은 문자열이 가로 스크롤을 넘어 입력을 받더라도 문자열을 계속 입력 할 수 있고 엔터 키를 누르면 강제로 개행이 바뀐다. 하지만 singleLine 속성을 주면 개행이 되지 않는다.
Hint는 배경에 이 컴포넌트가 어떤 동작을 하는 것인지 예시를 적어 줄 수도 있게 되어 있다. 마치 백그라운드 처럼 나타난다.
또한 selectAllOnFocus 속성을 지정하면 문자열 전체를 선택하면서 캐럿은 맨 마지막에 위치 한다.
cursorVisible은 편집 중인 문자열의 위치를 보이거나 숨겨준다.
autoLink는 | 를 통하여 여러가지 링크를 같이 한다. 그 종류는 다음과 같다.
none - 링크 지원하지 않음
email - 이메일 주소
map - 지도 주소
web - 웹 주소
phone - 전화번호
all - 모든 패턴 인식
Editable 을 이용하면 문자열 편집이 가능하다.
Editable insert(int index, CharSequence text) 경우는 어디 위치에 text를 삽입하라
Editable delete(int index, int endIndex) 경우는 어디 위치에서 endIndex까지 문자열을 삭제하라
Editable append(char text) 경우는 맨 마지막에 text를 붙여라
void clear() 경우는 문자열 clear
Editable replace(int startIndex, int endIndex, CharSequence text) 경우는 어디 위치에서 어디 위치까지 문자열 변경하라
TextWatcher 를 이용하면 입력되는 문자의 변경을 감지 할 수 있다.
단 android.text.*; 을 import 시켜야 한다.
다음은 그 예제 이다.
TextView view;
EditText edit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (TextView)findViewById(R.id.view);
edit = (EditText)findViewById(R.id.edit);
edit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(3)});
edit.addTextChangedListener(watcher);
}
TextWatcher watcher = new TextWatcher(){
public void afterTextChanged(Editable s){
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){
}
public void onTextChanged(CharSequence s, int start, int before, int count){
view.setText("echo : " + s);
}
};
위에서 보면 after, before, on 으로 변경 후, 변경 전, 변경 중 상태에 대한 이벤트라는 것을 알 수가 있다.
또한 setFilters를 이용하여 입력하는 문자열의 길이를 제한 시킬 수도 있다.
설정
트랙백
댓글
글
대체 리소스란 그 환경이 변함에 따라 대체 한다는 의미이다.
예를 들어 화면을 회전 하였을 경우 거기에 맞게 변화하게 된다.
여기에서 기본 적으로 가로 형태를 돌렸을 경우 -land 폴더를 찾아가고 -port 경우는 세로이다.
-port 가 없을 경우에는 layout 폴더를 참조를 한다.
먼저 res/layout-land 폴더를 만들고 layout 내의 xml과 동일한 내용을 적용을 시켜보자 코드는 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
>
<Button
android:layout_width="100px"
android:layout_height="wrap_content"
android:text="1번"
/>
<Button
android:layout_width="100px"
android:layout_height="wrap_content"
android:text="2번"
/>
</LinearLayout>
이 코드를 실행하여 에뮬레이터에서 Ctrl + F11 을 누르면 화면의 방향이 변하는데 이를 실행함서 그 내용을 확인 할 수 있다.
설정
트랙백
댓글
글
여기서 스타일은 뷰, 테마는 액티비티 단위에 적용되고, 스타일은 문단 스타일, 테마는 데스크탑 테마와 개념상 일치한다.
스타일은 상속을 이용하여 사용 할 수가 있다. 그럴 경우 parent라는 키워드가 붙지만, 그렇지 않을 경우 name만 이용하면 된다.
다음은 그 예이다.
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name = "style1">
<item name = "android:textColor">#fff000</item>
<item name = "android:textSize">15pt</item>
</style>
<style name = "style2" parent ="@style/style1">
<item name = "android:textColor">#ff0000</item>
</style>
</resources>
main.xml
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
style = "@style/style1"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
style ="@style/style2"
/>
실행을 해 보면 처음의 것은 노란색 글자가 나오고 15pt로 정의 된 글자가 나올 것이다.
두번째는 색상은 재정의 했으나 size는 상속받은 내용 대로 15pt로 동일하게 출력이 되는 것을 확인 할 수 있다.
테마의 경우를 살펴보면 styles.xml에 하나만 추가를 해 주면 된다.
<style name="theme">
<item name = "android:windowNoTitle">true</item>
</style>
그리고 메니페스트 속성에 테마를 지정을 해 준다.
android:theme="@style/theme"
이 부분을 activity 부분에 추가를 해 주면 된다.
그렇게 하면 윈도우 타이틀이 없어짐을 확인 할 수 있으며, android:theme="@android:style/Theme.Dialog" 처리를 할 경우 대화상자 처럼 나타 날 것이다.
설정
트랙백
댓글
글
문자열, 이미지, 사운드 등이 그 예이다.
리소스 타입은 이클립스 왼편의 res 아래에 있는 내용들이다. 물론 추가를 하여 이용 할 수도 있다.
리소스 명칭은 복수형을 의미하는 s가 접미로 붙고 모두 소문자여야만 한다.
문자열은 strings, 색상은 colors, 스타일과 테마는 styles, 배열은 arrays, 크기 정보들은 dimens 에 정의 된다.
실제 예를 들어
strings에 문자열 하나, dimes에 크기 정보 하나를 넣어 두고 다음과 같은 코드를 실행 해 보면 그 결과를 확인 할 수 있다.
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textSize="@dimen/size"
/>
설정
트랙백
댓글
글
Copy, Paste 등과 같은..
이것은 최초 registerForContextMenu(View view)를 통해 등록 한 후
onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ConTextMenuInfo info) 를 통하여
그 화면 구성을 나타낸다.
물론 선택 내용에 대해서는 onContextItemSelected(MenuItem item) 을 통해서 그 이벤트를 정의 한다.
다음은 그 예제 코드이다.
main.xml
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:text="Button"
android:textSize="20px"
/>
<EditText
android:id="@+id/edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="edit"
/>
java
/** Called when the activity is first created. */
Button btn;
EditText edit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.btn);
edit = (EditText)findViewById(R.id.edit);
registerForContextMenu(btn);
registerForContextMenu(edit);
}
@Override
public void onCreateContextMenu(ContextMenu menu,View view, ContextMenu.ContextMenuInfo info){
super.onCreateContextMenu(menu,view,info);
if(view==btn){
menu.setHeaderTitle("Button menu");
menu.add(0,1,0,"Red");
menu.add(0,2,0,"Green");
menu.add(0,3,0,"Blue");
}
else if(view==edit){
menu.add(0,4,0,"텍스트1");
menu.add(0,5,0,"텍스트2");
}
}
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case 1:
btn.setTextColor(Color.RED);
return true;
case 2:
btn.setTextColor(Color.BLUE);
return true;
case 3:
btn.setTextColor(Color.GREEN);
return true;
case 4:
Toast.makeText(this, "1번", Toast.LENGTH_SHORT).show();
return true;
case 5:
Toast.makeText(this, "2번", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
다음을 실행 해 보면 버튼을 누르고 있을 떄와 에디트텍스트를 누르고 있을 때 서로 다른 점을 확인 할 수가 있을 것이다.
설정
트랙백
댓글
글
라디오 박스의 경우 group을 통하여 서로 꼭 묵어주는 것을 잊으면 안된다.
또한 이 메뉴는 컨텍스트 메뉴와 서브 메뉴에서만 사용이 가능하다.
다음은 그 예시 코드 이다.
main.xml
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:text="Button"
android:textSize="20px"
/>
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/submenu"
android:title="SubMenu">
<menu>
<group
android:id="@+id/checkble_group"
android:checkableBehavior="all">
<item
android:id="@+id/bigfont"
android:title="BigFont"
/>
</group>
<group
android:id="@+id/exclusive_checkable_group"
android:checkableBehavior="single">
<item android:id="@+id/red"
android:title="RED"
android:checked="true"/>
<item android:id="@+id/green"
android:title="GREEN"
android:checked="true"/>
<item android:id="@+id/blue"
android:title="BLUE"
android:checked="true"/>
</group>
</menu>
</item>
</menu>
java
Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.btn);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu,menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu){
if(btn.getTextSize()==40){
menu.findItem(R.id.bigfont).setChecked(true);
}
else{
menu.findItem(R.id.bigfont).setChecked(false);
}
int color = btn.getTextColors().getDefaultColor();
if(color==Color.RED){
menu.findItem(R.id.red).setChecked(true);
}
else if(color==Color.GREEN){
menu.findItem(R.id.green).setChecked(true);
}
else if(color==Color.BLUE){
menu.findItem(R.id.blue).setChecked(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.bigfont:
if(item.isCheckable()){
btn.setTextSize(20);
}
else{
btn.setTextSize(40);
}
return true;
case R.id.red:
btn.setTextColor(Color.RED);
return true;
case R.id.blue:
btn.setTextColor(Color.BLUE);
return true;
case R.id.green:
btn.setTextColor(Color.GREEN);
return true;
}
return false;
}
이 코드를 실행하면 서브 메뉴 선택에 따라서 버튼에 대한 상태가 바뀜을 확인 할 수 있다.
RECENT COMMENT