2010/04/05
[Study Note] Context Menu 사용하기~~
Context Menu 는 View에서 사용자가 길게 터치(Long-Touch)할 경우 보여지는 메뉴이다.
Context Menu 를 사용하기 위해서는 View 를 registerForContextMenu 함수를 이용하여 Context Menu 를 호출 할 수 있도록 등록하여 주어야 한다.
registerForContextMenu( View v );
View 를 registerForContextMenu 를 이용하여 등록하면 해당 View 에서 사용자가 Long-Touch 를 하게되면 onCreateContextMenu 함수가 호출이 된다. 이때 넘겨 받은 View 개체에 따라서 적절한 Menu를 만들어 주면 만들어진 Menu가 보여지게 된다. Context Menu 는 서브 메뉴와 Checkable Menu 를 지원한다.
public void onCreateContextMenu( ContextMenu menu,
View v, ContextMenu.ContextMenuInfo menuInfo )
매개변수
ContextMenu menu : 보여지게 될 menu 개체
View v : Context Menu 를 소유한 View 개체
ContextMenu.ContextMenuInfo menuInfo : menu에 대한추가 적인 정보로 내용은 view 에따라 달라짐.
보여지는 Context Menu 를 선택하게 되면 onContextItemSelected 함수가 호출이 되고 이때 선택된 메뉴가 넘어 매개변수(MenuItem)로 오는데 받은 메뉴에 대한 적절한 처리를 해 주면 된다.
public boolean onContextItemSelected( MenuItem item )
매개변수
MenuItem item : 선택된 Context Menu
반환 값
선택 된 Menu item에 대한 처리 여부
<
Original Post : http://neodreamer-dev.tistory.com/401
Context Menu 를 사용하기 위해서는 View 를 registerForContextMenu 함수를 이용하여 Context Menu 를 호출 할 수 있도록 등록하여 주어야 한다.
registerForContextMenu( View v );
View 를 registerForContextMenu 를 이용하여 등록하면 해당 View 에서 사용자가 Long-Touch 를 하게되면 onCreateContextMenu 함수가 호출이 된다. 이때 넘겨 받은 View 개체에 따라서 적절한 Menu를 만들어 주면 만들어진 Menu가 보여지게 된다. Context Menu 는 서브 메뉴와 Checkable Menu 를 지원한다.
public void onCreateContextMenu( ContextMenu menu,
View v, ContextMenu.ContextMenuInfo menuInfo )
매개변수
ContextMenu menu : 보여지게 될 menu 개체
View v : Context Menu 를 소유한 View 개체
ContextMenu.ContextMenuInfo menuInfo : menu에 대한추가 적인 정보로 내용은 view 에따라 달라짐.
보여지는 Context Menu 를 선택하게 되면 onContextItemSelected 함수가 호출이 되고 이때 선택된 메뉴가 넘어 매개변수(MenuItem)로 오는데 받은 메뉴에 대한 적절한 처리를 해 주면 된다.
public boolean onContextItemSelected( MenuItem item )
매개변수
MenuItem item : 선택된 Context Menu
반환 값
선택 된 Menu item에 대한 처리 여부
리소스 파일 보기
menu_edit.xml
menu_image.xml
menu_button.xml
main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/MnuCopy"
android:title="Copy"
/>
<item
android:id="@+id/MnuCut"
android:title="Cut"
/>
<item
android:id="@+id/MnuPaste"
android:title="Paste"
/>
<item
android:title="Macro">
<menu>
<item
android:id="@+id/MnuMacro1"
android:title="Macro 1"
/>
<item
android:id="@+id/MnuMacro2"
android:title="Macro 2"
/>
<item
android:id="@+id/MnuMacro3"
android:title="Macro 3"
/>
</menu>
</item>
</menu>
menu_image.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/MnuZoomFit"
android:title="Zoom Fit"
android:icon="@drawable/icon"
/>
<item
android:id="@+id/MnuZoomIn"
android:title="Zoom In"
android:icon="@drawable/icon"
/>
<item
android:id="@+id/MnuZoomOut"
android:title="Zoom Out"
android:icon="@drawable/icon"
/>
<item
android:title="Magnify"
>
<menu>
<item
android:id="@+id/MnuHalf"
android:title="x 0.5"
android:icon="@drawable/icon"
/>
<item
android:id="@+id/MnuFull"
android:title="x 1.0"
android:icon="@drawable/icon"
/>
<item
android:id="@+id/MnuDouble"
android:title="x 2.0"
android:icon="@drawable/icon"
/>
</menu>
</item>
</menu>
menu_button.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/MnuHi"
android:title="Hi!"
android:checkable="true"
android:checked="false"
/>
<item
android:id="@+id/MnuBye"
android:title="Bye!"
android:checkable="true"
android:checked="false"
/>
</menu>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/TVHello"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ImageView
android:id="@+id/IVIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"
android:layout_gravity="center"
/>
<Button
android:id="@+id/BtnHi"
android:text="Hi!"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
소스 파일 보기
package com.neodreamer.MyMenu;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MyMenu extends Activity
{
TextView tvHello;
ImageView ivIcon;
Button btnHello;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvHello = (TextView)findViewById( R.id.TVHello );
ivIcon = (ImageView)findViewById( R.id.IVIcon );
btnHello = (Button)findViewById( R.id.BtnHi );
registerForContextMenu( tvHello );
registerForContextMenu( ivIcon );
registerForContextMenu( btnHello );
}
public void onCreateContextMenu( ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuinfo )
{
if ( v == tvHello )
{
// menu_edit.xml 에서 메뉴 불러오기
MenuInflater inflater = getMenuInflater();
inflater.inflate( R.menu.menu_edit, menu );
menu.setHeaderIcon( R.drawable.icon );
menu.setHeaderTitle( "Context for TextView" );
return;
}
if ( v == ivIcon )
{
// menu_image.xml 에서 메뉴 불러오기
MenuInflater inflater = getMenuInflater();
inflater.inflate( R.menu.menu_image, menu );
menu.setHeaderIcon( R.drawable.icon );
menu.setHeaderTitle( "Context for ImageView" );
return;
}
if ( v == btnHello )
{
// menu_button.xml 에서 메뉴 불러오기
MenuInflater inflater = getMenuInflater();
inflater.inflate( R.menu.menu_button, menu );
menu.setHeaderIcon( R.drawable.icon );
menu.setHeaderTitle( "Context for Button" );
// Button 의 Caption 에 따라 메뉴 바꾸기
if ( btnHello.getText().toString().compareTo( "Hi!" ) == 0 )
{
menu.findItem( R.id.MnuHi ).setChecked( true );
}
else
{
menu.findItem( R.id.MnuBye ).setChecked( true );
}
return;
}
}
public boolean onContextItemSelected( MenuItem item )
{
switch ( item.getItemId() )
{
case R.id.MnuHi:
btnHello.setText( "Hi!" );
return true;
case R.id.MnuBye:
btnHello.setText( "Bye!" );
return true;
}
return false;
}
}
TextView 의 Context Menu | Context Menu의 Sub Menu |
ImageView 의 Context Menu | Context Menu의 SubMenu |
Button의 Context Menu 1 | Button의 Context Menu 2 |
<
Original Post : http://neodreamer-dev.tistory.com/401
Labels:
Android
,
Android Development
,
context menu
,
TistoryOldPost
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment