2014年3月2日日曜日

ViewPagerが表示されない

カレンダー(Fragmentoにて作成)をViewPagerで次月や前月をスワイプ表示させようと思ってハマったことをメモ。

FragmentStatePagerAdapter内にisViewFromObjectメソッドを入れてしまうとViewPager部分がまったく表示されないようである。

そもそも、isViewFromObjectはObjectにViewが含まれているか判定するメソッドで、
Fragmentを使わないでPagerAdapterで作成していたときに必要だったが、
FragmentStatePagerAdapterの場合ではすべてfalseで返ってしまう為ViewPagerが表示されないようである(たぶん)。

たったこれだけのことで結構ハマったので投稿しておく。

2014年2月1日土曜日

GridViewで余白が消せない

GridViewを使ってカレンダーを作成していたら余白がどうしても消せずに、問題解決まで2時間も費やしてしまった。
レイアウトのどこかにmarginを設定してしまっているのかと思い、関係しそうなレイアウトを洗ってみるが怪しいところはどこにもなく、いつものダークサイドに落ちかけた。

自分の悪い癖で、一度ダークサイドに落ちるとますます深みにはまり論点がずれてしまう。
今回は一旦冷静になりググってみるとあっさり解決方法が見つかる。



GridViewにはどうもデフォルトスタイルが設定されており、その中で余白が設定されているようである。
①、②の手順で解決!

① 以下のようにgridview_bg.xmlを作成してdrawableに保存

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 項目にフォーカス有り かつ 押されていない -->
    <item
        android:drawable="@android:color/transparent"
        android:state_focused="true"
        android:state_pressed="false">
    </item>
    <!-- 項目にフォーカス有り かつ 押されている -->
    <item
        android:drawable="@android:color/transparent"
        android:state_focused="true"
        android:state_pressed="true">
    </item>
    <!-- 項目にフォーカスなし かつ 押されている -->
    <item
        android:drawable="@android:color/transparent"
        android:state_focused="false"
        android:state_pressed="true">
    </item>
</selector>


② GridViewタグでandroid:listSelector="@drawable/gridview_bg"を追加

<GridView
        android:id="@+id/gridView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:listSelector="@drawable/gridview_bg">
 </GridView> 

2014年1月4日土曜日

EditTextでフォーカスされない

Androidアプリ開発で技術的にはまった事は、
今後の為にも記録として残すべきだと思い、さっそくブログ立ち上げで投稿。

ノートにまとめていってもいいんだけど、今流行りのブログをメモ帳代わりにしてみよう。

さっそく、フォーカス設定でちょっとはまった事。

  mNumInput1.requestFocus();でフォーカスをセットしているはずなのに、
フォーカス時のレイアウトがセットされない。。。

行き詰ること数時間、<item>タグの設定順が問題ということに気付く。


drawable/dialog_EditText_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
    <!-- 押されていないときの定義 -->
 <item android:state_pressed="false">
  <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <solid
          android:color="@color/cornflowerblue" />
      <corners
          android:radius="3dp"/>
      <stroke
          android:width="1dp"
          android:color="@color/white"/>
  </shape>
 </item>

    <!-- 押されたときの定義 -->
 <item android:state_pressed="true"
     android:state_focused="false">
  <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <solid
          android:color="@color/cornflowerblue" />
      <corners
          android:radius="3dp"/>
      <stroke
          android:width="3dp"
          android:color="@color/darkorange"/>
  </shape>
 </item>

    <!-- フォーカスされたときの定義 -->
 <item android:state_focused="true">
     <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <solid
          android:color="@color/cornflowerblue" />
      <corners
          android:radius="3dp"/>
      <stroke
          android:width="3dp"
          android:color="@color/green"/>
  </shape>
 </item>
</selector>


上から順に読み込んでいくようで、一番目のandroid:state_pressed="false" もしくは2番目のandroid:state_pressed="true">で処理が完了してしまい、3番目のandroid:state_focused="true"は処理されていなかったようだ。

 <!-- フォーカスされたときの定義 -->を一番上に持ってくることで解決!