Android 今後の注意

この記事では、Androidプラットフォーム用のアプリケーションの構築に関する私の意見と経験を共有したいと思います。 将来の時間を節約する方法について。



レイアウト



Androidプラットフォームのすべての初心者プログラマーは、UIを構築するにはプロジェクトディレクトリ/ res / layoutにxmlファイルを作成し、それを素晴らしい方法でJavaコードに関連付ける必要があることにすぐに気づくと思います。 最初は、これは奇妙な方法のように思えますが、すぐに何かが欠けているという感覚があり、IDEのAndroidプラグインのUIデザイナーは奇跡からはほど遠いです。 まあ、十分に暴言、ポイントに!



市場に出回っているさまざまなデバイスに深く入り込まない場合、私の場合は何らかのAndroidプラットフォームがあります。ターゲットデバイスの画面サイズはわかっています。 同じ状況があるとします。



一般に、2つのフォルダー/ res / layoutおよび/ res / layout-landが必要です。 ここで-landは修飾子として機能します。つまり、このフォルダー内のレイアウトはすべて、ランドスケープ(水平)モードでのみ使用できます。 垂直と水平の両方のモードで同じように見えるレイアウトがある場合、/ res / layoutに配置されます。 Androidは、アクティビティデストラクタを独自に呼び出し、AndroidManifestで特定の方向が指定されていない限り、画面が回転すると新しいアクティビティを作成します。 したがって、/ res / layoutおよび/ res / layout-landフォルダーの両方に同じ名前のレイアウトを配置でき、Androidが現在のレイアウトの読み込みを処理します。



コードでは、アクティビティは通常どおり呼び出されます



setContentView(R.layout.[ layout]);
      
      





私から何? 実際、彼はとにかくネットで見つけられるものを簡単に説明した。 実際、非常にグラフィカルに修正されたアプリケーションを作成する必要がありました。 ほとんどの要素は非常に変更されています。 最初に思いついたのは間違っていました。 たとえば、同じListViewから独自の子コンポーネントを作成することにしましたが、そこからonDraw、dispatchDrawなどが始まりました。そのため、要素のレンダリング時に特定の値をピクセル単位で駆動しました。



これはそれをしない方法です。 抜け道がない場合でも、最後までコンポーネントを作成せずに、レイアウトを使用してください。 ListViewのBaseAdapterを書くことは、たとえば別のレイアウトをロードしてそれを制御する場所など、はるかに優れています。 解決方法がない場合は、ピクセル単位のUIのすべての値をコンポーネントプロパティ(attrs)で取り出す必要があります。これは、コンポーネントがxmlで記述されるときに送信されます。 xml内の値自体も直線を指していませんが、ディメンション、リンクを使用しています。



属性とディメンションが意味するものを見てみましょう。



属性



Androidは、追加機能を使用してカスタムコンポーネントを拡張する暗黙的な方法を提供します。 / res / valuesにattrs.xmlファイルを作成する必要があります。 別の方法でこのファイルに好きな名前を付けることができますが、この名前が標準であると考えています。



attrs.xmlの内容は人間が読むことができます。 簡単な例を見てみましょう:



 <?xml version="1.0" encoding="utf-8" ?> <resources> <declare-styleable name="MyExampleView"> <attr name="exampleAttrWidth" format="dimension" /> </declare-styleable> </resources>
      
      





リソースは常に検出され、リソースの保存に使用され、その後アプリケーションパッケージの静的クラスRを介してJavaコードで使用できます。 たとえば、R.styleable.MyExampleViewを介して宣言を利用できます。 私の観察と私が使用しなければならなかったものによると、そのようなリスト形式(プロパティタイプ)があります:

Viewの後継であるcom.android.example.view.MyExampleViewという独自のクラスがあるとします。 簡単に説明します。



 package com.android.example.view; // import public class MyExampleView extends View { private exampleWidth; public MyExampleView(Context context) { super(context); //    this.exampleWidth = 128; } public MyExampleView(Context context, AttributeSet attrs) { super(context, attrs); initialize(context, attrs, 0); } public MyExampleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initialize(context, attrs, defStyle); } private void initialize(Context context, AttributeSet attrs, int defStyle) { //     xml final TypedArray styledAttributes = context.obtainStyledAttributes(attrs, R.styleable.MyExampleView, defStyle, 0); try { //   exampleWidth  dimension   this.verticalSpace = styledAttributes.getDimensionPixelSize(R.styleable.MyExampleView_exampleWidth, 128 /*    */); } finally { //  Android  ,      styledAttributes.recycle(); } } }
      
      





したがって、xmlから直接構成できる独自のコントロールを作成しました。このメソッドは非常に柔軟です。 デフォルトを除き、コード内の特定の値へのバインドはありません。 要素を作成するには、レイアウトを記述します。



 <!--      xmlns:example="http://schemas.android.com/apk/res/com.android.example.view"  ,     example:[ ] --> <com.android.example.view.MyExampleView example:exampleWidth="@dimen/exampleWidth" /> <!-- ... -->
      
      





寸法



理想的な世界では、すべての値は/res/values/dimensions.xmlで[value] dpの形式で取り出され、xmlまたはコードでdimen / [name]へのリンクを介して使用される必要があります。 現時点で行っているように、テキストのサイズ、アプリケーションの主要要素、たとえば、いくつかのパネルのオフセット、デフォルトのパディング/マージンなどを取り出すことをお勧めします。 10ピクセルの距離にあるボタン。



このようなアプローチは、アプリケーションですべてのテキストが標準化されているようにするのに役立ちます。たとえば、30ピクセルの大きな見出し、24のメディア、16のプレーンテキストなどです。気に入らない場合は、1か所で変更します。



原則として、これについて長い間説明しますが、1つのポイントがあります。 Googleは最近Eclipse用のAndroidプラグインをそれぞれ更新しましたが、今ではそのような獣Lintがあります。 だから、彼はいつも私にウインクし、pxではなくdpを使うべきだと確信させて、別の理由で描いた。 信じた、した。 では、密度について考えてみましょう。 私が理解している限り、この値はピクセルが互いにどれだけ密接に配置されているかを示しています。 つまり たとえば、800x600の解像度のデバイスがあるとします。 しかし、実際には、1つのデバイスに800 * 600ピクセルがあり、もう1つのデバイスに2 * 800 * 2 * 600があります。違いを見つけたと思いますか? つまり 解像度は1つですが、品質とそれに応じてピクセル密度は完全に異なります。 そして、ここがリントのキャッチです。 dpを使用して、より高密度のデバイスに移行した後、すべての要素を駆動し、テキストがまったく異なるサイズになりました(視覚的に)。



結局のところ、どこからでもpxを使用し、Lintの警告を無視し、dpをpxに書き換えるのに余分な時間を費やすことはありませんでした。





Androidの色は、xmlでargb、rgbの形式で表すこともできます(すべきです)。 たとえば、白色:

原則として、ルールはディメンションと非常によく似ており、通常は/res/values/colors.xml内、resourcesタグ内にもあります。 色をレンダリングすることは、完全なUIを標準化するために使用される色であり、要素の1つの小さな詳細ではありません。 いわば、妄想と怠lazの間の黄金のセリジン。



これらのメモが時間を節約するか、何かをより深く理解するのに役立つことを願っています。



UPD:

テキストのエラーを指摘してくれたsdfsdhgjkbmnmxcandreichに感謝します。



All Articles