2016-07-07 7 views
0

enter image description hereどのようにしてTextViewの位置を調整できますか?上記画像における

、黒吹き出しとその背後に赤い背景垂直電話画面の幅にまたがる単一ImageViewあります。 「Hello」はTextViewで、レイアウトは相対的です。マージンを使って、Androidのエミュレータでスピーチバブルの中に「こんにちは」を配置することができましたが、別の携帯電話をエミュレートすると位置付けがオフになります。

  1. TextView
  2. は(こんにちはどんなデバイス、常に の音声バブルしないように)それが応答にするが方法です配置する良い方法はありますか?

ここに私のxmlです:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/relativeLayout"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/mainGraphic" 
     android:src="@drawable/finished2" 
     android:layout_marginBottom="97dp" 
     android:layout_above="@+id/enterValue" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:maxWidth="200dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/helloText" 
     android:textColor="#FFFFFF" 
     android:layout_marginEnd="29dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentEnd="true" 
     android:layout_marginTop="45dp" /> 

</RelativeLayout> 
+0

は9パッチ画像ですか? –

答えて

0

私は画像のように同じサイズで代わりにRelativeLayoutでframeLayoutを使用します。 次に、TextViewに属性android:layout_gravity="center"android:gravity="center"を使用します。

0

このお試しください:

... 
    <TextView 
     android:maxWidth="200dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/helloText" 
     android:textColor="#FFFFFF" 
     android:layout_alignTop="@+id/mainGraphic" 
     android:layout_alignBottom="@+id/mainGraphic" 
     android:layout_alignLeft="@+id/mainGraphic" 
     android:layout_alignRight="@+id/mainGraphic" 
     android:gravity="center" /> 
... 
0

最善のアプローチは、9-パッチ画像は、TextViewの背景として設定&使用することです。通常のpngファイルを使用している場合、すべての解像度で正しく整列することは保証されません&引き伸ばしたときにぼやけることがあります。

9 - パッチのイメージは、ビューの内容と画面のサイズに合わせて自動的にリサイズされます。 Android SDKは、SDK sdk/toolsディレクトリ内にある9パッチイメージを作成するためのツールを提供します。 https://developer.android.com/studio/write/draw9patch.htmlを参照してください。

0

メッセージの形状には、9パッチを使用する必要があります。レイアウトのルートビューをFrameLayoutとしてから、TextViewを追加します。メッセージ形状Nine-patchをTextViewの背景として設定します。

9パッチを作成するには、Roman Nurik氏のhttps://romannurik.github.io/AndroidAssetStudio/nine-patches.htmlを参照してください。最良の結果を得るには、イメージアセットのPNGファイルをアップロードし、xhdpiの定義を選択するだけです。 Nine-patchには3つの主な特性があります。

ストレッチ領域:さまざまな画面濃度に対応するためにアセットのどの領域をストレッチすることができるかを定義します。

コンテンツパディング:画像内に表示されるコンテンツ(テキスト)のパディング領域を定義します。

光学境界:アセットの周りに光学的にどの程度の領域が表示されるべきかを定義します。ナインパッチを使用しての

長所:

  • スケーラブル
  • 簡単にコンテンツの任意の量がそれに入れることができる
  • 軽量
  • を使用します。

これが役に立ちます。

+0

答えをありがとう! 9パッチは特定のサイズ(相対的なレイアウトのために)でレンダリングされるだけであり、パッチ内でテキストが開始されるべきxmlにまだ注視しなければならなかったので、扱いにくかった。しかしそれは問題を改善しました。 – callynx

+0

「あなたは、それが特定のサイズでのみレンダリングされる(相対レイアウトのために)」という意味を理解できませんでした。あなたは、ルートレイアウトでテキストを紐づけるのに問題に直面してはいけません。あなたは何をしているのか正確に指定できますか?おかげで – Siddharth2092

+0

ここでは簡単なスクリーンショットです:http://imgur.com/DbYiS1Q。テキストのバブルは、このサイズのみにするか、画面全体の幅を塗りつぶしたいとします。私はそれがこの幅だが、この高さの2/3である必要があるのに対して。しかし、この方法ではサイズが変更されません。 コード: <?xml version = "1.0" encoding = "utf-8"?> callynx

0

理想的には、RelativeLayoutへの完全な赤の背景と、TextViewの黒いスピーチ9patch画像を使用するのが理想的です。 しかし、実際にRelativeLayoutに背景が赤い吹き出しで表示されるようにするには、実行時に設定する必要があります。

実行時にRelativeLayoutの高さと幅を計算すると、それぞれ150px300pxとなります。 背景画像を注意深く見て、上、右、下、左からバブルのエッジポイントを決定します。例えば、画像の高さが100px200pxであり、気泡トップが30pxから始まり、下端が70pxで始まる場合、右端は150pxで開始し、左端は250pxで始まります。 TextViewの幅と高さも計算します。

実行時に、上記の数値に基づいてTextViewの位置を変更します。

関連する問題