1

私はAndroidプログラミングにかなり慣れていませんが、ウィジェットをプログラミングしてくれる人がいますが、彼らは私が望んでいたものとは少し異なることをしました...彼らはすべてのテキストをテキストビューではなくビットマップとして表示されるウィジェット。これは私が望むコントロールを私に与えません。私がこれで持っているもののコードを投稿して、誰かが助けてくれるかどうか見てみましょう。そのための.javaコードは次のとおりです。

    String strHourFormat = "hh:mm";
    String strDateFormat = "MM.dd.yy";
    SimpleDateFormat fHour = new SimpleDateFormat(strHourFormat);
    SimpleDateFormat fDate = new SimpleDateFormat(strDateFormat);
    Date date = new Date();
    String am = date.getHours() > 11 ? "PM":"AM";

    setContentView(R.layout.widget_ui);
    TextView day = new TextView(this);
    day = (TextView) findViewById(R.id.day);
    day.setText("" + fDate.format( date));
    day.setTypeface(Typeface.createFromAsset(this.getAssets(), "roboto_thin.ttf"));

    ///////////
    WidgetBiggs.previousState = WidgetBiggs.getWifiState(getApplication());     
    SoundDebug.previousState = SoundDebug.getSoundState(getApplication());
    // Update each requested appWidgetId
    RemoteViews widgetView = WidgetBiggs.buildUpdate(getApplication(), -1);

    for(int wid:widgetIds){
        //final RemoteViews widgetView = new RemoteViews(getPackageName(),R.layout.widget_ui);
        widgetView.setImageViewBitmap( R.id.img_Hour, updateFontText(""+fHour.format(date),40,100,84,100,60)); 
        widgetView.setImageViewBitmap( R.id.img_AM, updateFontText(""+am,25,40,84,40,60)); 
        widgetView.setImageViewBitmap( R.id.img_Day, updateFontText("" + fDate.format( date),38,150,40,150,40)); 
        //widgetView.setImageViewBitmap( R.id.img_Weather, updateFontText(getWeatherGoogle().toString(),25,120,30,120,30));

間に他のいくつかのもの....

private Bitmap updateFontText(String time, int size, int width, int height, int widthText, int heightText) 
{
Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
Canvas myCanvas = new Canvas(myBitmap);
Paint paint = new Paint();
Typeface clock = Typeface.createFromAsset(this.getAssets(),"roboto_thin.ttf");
paint.setAntiAlias(true);
paint.setSubpixelText(true);
paint.setTypeface(clock);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setTextSize(size);
paint.setTextAlign(Align.RIGHT );
myCanvas.drawText(time, widthText, heightText, paint);
return myBitmap;

そして、これが私が始めたXMLです:

<TextView
    android:id="@+id/day"
    android:visibility="visible"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center_horizontal|center_vertical"
    android:textSize="32dp">            
</TextView>

これにより、私のアプリケーションは混乱します。目立つものがあれば教えてください。ビットマップテキストを取り出して、テキストビューテキストを入れたいのですが。ありがとうございます。

4

2 に答える 2

1

彼らのビットマップ戦略には何の問題もありません。画面密度に基づいて「サイズ」パラメータを変更するだけです。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

ここで、、、、、、およびsizeの値を。widthheightwidthTextheightTextmetrics.density

これにより、それらがdp値として扱われ、現在の画面に適切なpx値が生成されます。

ドキュメントから:

DisplayMetrics.densityフィールドは、現在の画面密度に従って、dp単位をピクセルに変換するために使用する必要のある倍率を指定します。中密度の画面では、DisplayMetrics.densityは1.0です。高密度画面では1.5になります。超高密度画面では、2.0に相当します。低密度の画面では、0.75になります。この数値は、現在の画面の実際のピクセル数を取得するためにdp単位を乗算する必要がある係数です。

ビットマップに固執すれば、フォントのレンダリングをより細かく制御できます。

于 2012-07-04T07:15:38.980 に答える
0

あなたの質問に対する簡単な答えは、密度リソースを使用することです。高密度画面を使用しているが、ビットマップが次の場合:

res/drawable-hdpi/

長い答えは、画面密度にはいわば「銀の弾丸」がなく、アプリを成功させるには、アプリがすべての画面で機能することを確認する必要があるということです。画像を1つの画面にレンダリングするのは簡単ですが、複数の解像度で同じ画像を維持するのは少し難しいです。

この記事では、ビットマップが1つだけでなく、すべての画面で正しく表示されるようにするために使用できるさまざまな方法と手法について説明します。この記事には、知っておくべきいくつかのベストプラクティスとその他の情報があり、それによって物事が簡単になります。

http://developer.android.com/guide/practices/screens_support.html

頑張ってください!

于 2012-07-04T15:22:50.110 に答える