2

以下は、xmlをどのように設計したかです。今、以下に示す白いボックス内にテキストビューを収めようとしています。しかし、FrameLayout によって制限されているため (少なくとも私はそう思います)、テキスト ビューをホワイト ボックスの中央またはどこかに収めるために値をハード コードする必要があります。この全体が単一の画像であるため、私の試行で理解したように、この目的で相対または他のレイアウトを使用することはできません。

ここに私のレイアウトがあります、

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:visibility="visible" android:layout_marginTop="60dip"
    android:layout_gravity="center" android:id="@+id/xxx">

    <ImageView android:id="@+id/calloutquizImage" 
        android:background="@drawable/callout" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:scaleType="fitCenter" />

    <ImageView android:id="@+id/triviaImage"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_alignTop="@+id/calloutquizImage" android:layout_gravity="left"
        android:src="@drawable/trivia" android:background="@drawable/trivia"
        android:layout_marginTop="50dip" android:layout_marginLeft="85dip"></ImageView>

    <TextView android:text="TextView" android:id="@+id/triviAnswerText"
        android:layout_marginTop="125dip" android:layout_marginLeft="85dip"
        android:layout_gravity="left" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:textColor="#000000"
        android:typeface="sans"></TextView>

    <ImageButton android:id="@+id/triviaanswercloseButton"
        android:src="@drawable/closebtn" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:background="@drawable/closebtn"
        android:layout_marginRight="8dip" android:layout_marginTop="43dip"
        android:layout_gravity="right" android:onClick="triviaanswerClose"></ImageButton>
    <ImageView android:id="@+id/buttontoclose"
        android:layout_gravity="left"
        android:visibility="visible" android:onClick="triviaanswerClose" 
        android:layout_marginTop="50dip" android:layout_marginLeft="75dip"
        android:layout_width="230dip" android:layout_height="170dip"></ImageView>
</FrameLayout>

このため、テキスト ビューは、さまざまなハンドセットで異なる位置に表示されます。

代わりにこれのために何ができると思いますか?

以下は私のイメージです:

ここに画像の説明を入力

4

2 に答える 2

5

あなたは正しいことをしていないと思います。白いボックス内にテキストを表示したい場合 (または、それに収まるテキストが多すぎる場合はサイズを変更したい場合) - レイアウトを避けて、1 つのTextView だけでそれを行うことができます。

NinePatchAndroid の画像をご覧ください: http://developer.android.com/reference/android/graphics/NinePatch.html

http://developer.android.com/tools/help/draw9patch.html - 描画ツール

したがって、基本的には1つのtextViewと2番目のリンクで9パッチに適切に変換された画像のみが必要です。(基本的には、画像の境界にいくつかの黒いピクセルを追加するだけです)。この 9-patch を textView の背景として設定するだけではありません。必要な場所にテキストを配置し、9-patch で定義した場合は白いボックスを縮小します。

UPD: 結果のスクリーンショットを見つけてください: ここに画像の説明を入力

ご覧のとおり、textView は WhiteBox 自体を処理せず、必要に応じてテキストを入力し、ボックスのサイズを変更します。

これを機能させる方法は次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <TextView
        android:id="@+id/first"
        android:background="@drawable/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Manymanymany text 
        Manymanymany text 
        Manymanymany text 
        Manymanymany text 
        Manymanymany text 
        Manymanymany text" />

    <TextView
        android:layout_below="@+id/first"
        android:background="@drawable/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Not so many text" />
</RelativeLayout>

そして、これが9patchに変換された画像です。「drawable/」フォルダに配置するだけです。注: 「back.9.png」という名前が必要です。 ここに画像の説明を入力

9patch の仕組みの詳細については、上記のリンクを確認してください。主なアイデア: 左側と上部の境界線に黒い点を作成することにより、画像を拡大する必要がある場合に画像のどの部分を引き伸ばすかを指定します。右側/下部にドットを作成することで、ビューにコンテンツを配置する場所を伝えます。この場合、コンテンツは TextView のテキストです。

それが役立つことを願っています、幸運を祈ります

于 2012-09-03T10:05:50.130 に答える
2

とのRelativeLayout内でFrameLayoutを使用できると思います。パラメータを使用することで、をホワイト ボックスに移動できます。詳細については、LayoutParams のドキュメントを参照してください。ImageViewTextViewTextView

たとえば。ImageView最初にブロックを追加し、次に を追加しTextViewて、TextViewが の上に配置されるようにしImageView、下揃えを使用して上余白を負の値で指定するとTextView、画像の上に移動できます。むしろ、Eclipse を使用している場合は、テキスト ビューをグラフィック レイアウトで直接移動できます。

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/tools"
    android:id="@+id/xxx"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginTop="0dp"
    android:visibility="visible" >

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margintop="0dp" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/user2" />
        <TextView
            android:id="@+id/Textviewtitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world"
            android:layout_below="@+id/imageView1"
            android:layout_marginTop="-10dp"
            app:context=".TestActivity" />

    </RelativeLayout>
 </FrameLayout>

上記と同様に、マージンを左右に指定して、必要に応じて適切に配置できますTextView。正しい位置を知るためのフィードバックについては、グラフィック レイアウトを確認してください。これが役に立った場合は返信してください。

高さと幅に画像と値を使用します。テストのために試しただけです。

于 2012-09-03T10:06:27.587 に答える