ビューを変更します。 インターフェイスの外観を変更する

少し前まで、インターネットをさまよいながら、Androidのデザインパターンがある素晴らしいサイトに出会いました。 素晴らしいサイト-インターフェイスをよりユーザーフレンドリーにする方法に関する多くの有用なヒントがありますが、私が好きではなかった大きな「しかし」があります。 サイト全体を登っても、少なくとも1つのパターンの実装へのリンクは見つかりませんでした。 また、このパターンに基づいてアプリケーションを考えて記述するのが極端に難しいというわけではありませんが、遅延は既存のものを見て使用する方が異なるため 、はるかに高速です。 そして、Androidの初心者開発者にとって、何ができるのか、どのようにそれを行うのかを見ると、生活が楽になります。 そのため、これらのパターンに関するチュートリアルを作成することをお勧めします。 そして、究極の真実を主張するのではなく、 この真実、つまり最初から真実を主張しましょう!







そのため、LayoutInflaterを使用してこれを実装します。 パターンページのサンプルページは、ListViewとGridViewを備えたファイルマネージャーを示しています。 ここではそれらを使用します。 したがって、list.xml:



<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView>
      
      





そしてgrid.xml(重力用に4つの列を作成し、重力を中央に設定します):



 <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="4" android:gravity="center" > </GridView>
      
      







ああ、そうです、私たちはまた、生活を最大限に簡素化するために、Viewのオブジェクトを個別に作成します。 したがって、list_item.xml:



  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Medium Text" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>
      
      







およびgrid_item.xml:



 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <Button android:id="@+id/gridButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:drawableTop="@drawable/ic_launcher" /> </LinearLayout>
      
      







さて、これでアクティビティを開始できます(main.xmlには触れません)。 設計パターンを使用しているため、アプリケーションのユーザーを尊重しようとするため、ログインごとにインターフェイスを構成する必要がないように、ユーザーの選択を記憶する必要があります。 これを行うには、SharedPreferencesを使用して、2つのメソッドを作成します。



 private void SavePreferences(String key, String value) { SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(key, value); editor.commit(); } private String LoadPreferences(String key) { SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); String loadedString = sharedPreferences.getString(key, "list"); return loadedString; }
      
      







次に、Viewを保存するViewGroupを作成する必要があります(View自体を作成するといいでしょう。「Views」と書くこともできますが、これらの用語が翻訳されているときは気に入らないので、英語で書く方が良いでしょう)。 Androidのドキュメントではこれを行うことは推奨されていないため、LayoutInflaterの個別のオブジェクトは作成しません(アクティビティのコンテキストで既に作成され、正しく構成されている、つまりインスタンスを取得するためにのみ残っているという事実によってこれを正当化します)。 したがって、このような猫をonCreateメソッドに追加します。



  setContentView(R.layout.main); content = new String[] {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"}; viewGroup = (ViewGroup) findViewById(R.id.mainLayout); list = getLayoutInflater().inflate(R.layout.list, null); grid = getLayoutInflater().inflate(R.layout.grid, null); if(LoadPreferences("VIEW").equalsIgnoreCase("list")) setList(); else setGrid();
      
      







次に、setList()およびsetGrid()について説明します。 将来、インターフェイスを動的に更新する必要があるため、このために別のメソッドを作成しました。



 private void setList() { viewGroup.removeAllViews(); viewGroup.addView(list); ListView listView = (ListView) list.findViewById(R.id.listLayout); listView.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.textItem, content)); } private void setGrid() { viewGroup.removeAllViews(); viewGroup.addView(grid); GridView gridview = (GridView) findViewById(R.id.gridLayout); gridview.setAdapter(new ArrayAdapter<String>(this, R.layout.grid_item, R.id.gridButton, content)); }
      
      







わあ! アプリケーションを実行してみてください! うまくいく! しかし、今ではスイッチを追加するのがいいと思います。実際には、この記事が書かれています。 これは、ハードキーが押されたときに呼び出されるメニューから行います。 menu.xmlは次のようになります。



 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item" android:title="Change view"></item> </menu>
      
      







そして、Activityで動作するメソッドもあります(インターフェイスを定義して独自のアクションを設定したため、両方のメソッドがスーパークラス操作を実行する代わりにtrueを返します)。



  @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if(LoadPreferences("VIEW").equalsIgnoreCase("list")) { setGrid(); SavePreferences("VIEW", "grid"); } else { setList(); SavePreferences("VIEW", "list"); } return true; }
      
      







まあ、それだけです。 念のため、プロジェクトをアーカイブに投稿します 。 初心者のAndroid開発者の皆さん、幸運を祈ります。



All Articles