2014年4月15日火曜日

InsetDrawableで余白のある区切り線を作る

InsetDrawableについては「Android InsetDrawableを活用する」で取り上げましたが、これを使うとListView用に左右に余白のある区切り線を作ることができます。 res/drawable/list_divider.xml <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="8dp" android:insetRight="8dp"> <shape> <solid android:color="#cccccc" /> <size android:height="1dp" /> </shape> </inset> public class MainListFragment extends ListFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ListView lv = getListView(); lv.setDivider(getResources().getDrawable(R.drawable.list_divider)); } ... }



2014年4月14日月曜日

Android 画像サイズ

アップアイコン (48dp x 48dp)

ldpi36 x 36(1dp = 3/4px4dp = 3px)
mdpi48 x 48(1dp = 1px4dp = 4px)
hdpi72 x 72(1dp = 1.5px4dp = 6px)
xhdpi96 x 96(1dp = 2px4dp = 8px)
xxhdpi144 x 144(1dp = 3px4dp = 12px)
xxxhdpi192 x 192(1dp = 4px4dp = 16px)




Action Bar (32dp x 32dp、24dp x 24dp)

外枠内枠
ldpi24 x 2418 x 186
mdpi32 x 3224 x 248
hdpi48 x 4836 x 3612
xhdpi64 x 6448 x 4816
xxhdpi96 x 9672 x 7224
xxxhdpi128 x 12896 x 9632




2014年4月11日金曜日

Facebookとそれ以外でACTION_SENDで渡すテキストを変える

Facebookはポリシーで投稿のpre-fillを禁止している(https://developers.facebook.com/policy/)ため、テキストの代わりにリンクを共有することがよくあります。

前回の「「ギャラリーから選択」と「カメラで撮影」を1つのchooserで表示する。」と同じ方法を使うと、Facebookとそれ以外でIntent.EXTRA_TEXTに含める文字列を変えることができます。 /** * Facebook ではリンクを共有し、それ以外(FB Messenger 含む)ではテキストを共有する */ private void share() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); List<ResolveInfo> resInfo = getActivity().getPackageManager() .queryIntentActivities(intent, 0); if (resInfo.isEmpty()) { return; } String shareText = getString(R.string.share_text); String shareTextFacebook = getString(R.string.share_link); List<Intent> shareIntentList = new ArrayList<>(); for (ResolveInfo info : resInfo) { Intent shareIntent = (Intent) intent.clone(); if (info.activityInfo.packageName.toLowerCase() .equals("com.facebook.katana")) { shareIntent.putExtra(Intent.EXTRA_TEXT, shareTextFacebook); } else { shareIntent.putExtra(Intent.EXTRA_TEXT, shareText); } shareIntent.setPackage(info.activityInfo.packageName); shareIntentList.add(shareIntent); } Intent chooserIntent = Intent.createChooser(shareIntentList.remove(0), getString(R.string.select_app)); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentList.toArray(new Parcelable[]{})); startActivity(chooserIntent); }