読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

ListPopupWindowを使ってみる

概要

adapterを使ってpopupを作成するListPopupWindowを使ってみる

詳細

まずは下準備
レイアウト

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/showpopup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="show listpopupwindow1" />

    <Button
        android:id="@+id/showpopup2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="show listpopupwindow2" />

</LinearLayout>

スタイル

    <style name="ListPopupWindowAnimation" parent="@android:style/Animation">
        <item name="android:windowEnterAnimation">@anim/rolldown</item>
        <item name="android:windowExitAnimation">@anim/rollup</item>
    </style>

アニメーション
rolldown

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fromXScale="1.0"
    android:fromYScale="0.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="0%"
    android:toXScale="1.0"
    android:toYScale="1.0" />

rollup

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="0%"
    android:toXScale="1.0"
    android:toYScale="0.0" />

別にスタイルとかは設定する必要はないけど、通常の動作とスタイルを触った時とを比較するために作成
最後にjava

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		findViewById(R.id.showpopup).setOnClickListener(this);
		findViewById(R.id.showpopup2).setOnClickListener(this);
	}

	// 省略

	@Override
	public void onClick(View v) {
		
		String[] data = {"data1","data2","data3","data4"};
		final ArrayAdapter<String> adapter = 
				new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
		
		final ListPopupWindow lpw = new ListPopupWindow(this);
		
		lpw.setAdapter(adapter);
		
		lpw.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				String s = (String)adapter.getItem(position);
				Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
			}
			
		});
		
		// popup表示契機となるアンカーviewを設定
		lpw.setAnchorView(v);
		
		if(v.getId() == R.id.showpopup2) {
			// offse(表示位置)の設定
			lpw.setHorizontalOffset(20);
			lpw.setVerticalOffset(20);
			lpw.setAnimationStyle(R.style.ListPopupWindowAnimation);
			
			GradientDrawable d =
					new GradientDrawable(GradientDrawable.Orientation.BR_TL, new int[] {Color.BLACK, Color.DKGRAY});
			lpw.setBackgroundDrawable(d);
			
			ImageView iv = new ImageView(this);
			iv.setImageResource(R.drawable.ic_launcher);
			
			lpw.setPromptView(iv);
			lpw.setPromptPosition(ListPopupWindow.POSITION_PROMPT_ABOVE);
		}
		
		lpw.show();
	}

f:id:tiro105:20141014235031p:plain

感想

簡単にスタイルを触れて便利
簡単な設定画面にダイアログを出すくらいならpopupでいいかもしれない

参考

Android UI Cookbook for 4.0 ICS(Ice Cream Sandwich)アプリ開発術

Android UI Cookbook for 4.0 ICS(Ice Cream Sandwich)アプリ開発術