2017-09-14 6 views
0

8000 LPのように見えるようにtextviewをデザインすることが可能かどうかを知りたいと思っています(上部と下部の境界も同様です)。私はそれを見てみましたが、私が見つけることができるのは、人々がテキスト上のアウトライン/シャドーボーダーをどのようにしたいかです。可能であれば私のレイアウトにテーブルを作成したくないのですが、必要ならば私のコードフォーマットに合わせた例を挙げてください。Androidのtextview - 各文字を境界線にすることが可能

Heresは私が何を意味するかの例です...それはその四角の境界で区切られた各番号を持っています。 duel link

Heres my xml(関連情報のみが短縮されています)。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/default_background_obelisk" 
    android:scaleType="centerCrop" 
    android:padding="16dp"> 
<TextView 
     android:id="@+id/playerTwo_LP" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:gravity="center" 
     android:textSize="40dp" 
     android:textColor="#ffffff" 
     android:text="8000 LP" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:rotation="180" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toRightOf="@+id/playerTwo_addLP" 
     app:layout_constraintRight_toLeftOf="@+id/playerTwo_loseLP" 
     app:layout_constraintBottom_toBottomOf="@+id/playerTwo_toolKit" 
     android:textIsSelectable="true"/> 

* * * 

<TextView 
     android:id="@+id/playerOne_LP" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:gravity="center" 
     android:text="8000 LP" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     app:layout_constraintTop_toTopOf="@+id/playerOne_toolKit" 
     app:layout_constraintLeft_toRightOf="@+id/playerOne_toolKit" 
     app:layout_constraintRight_toLeftOf="@+id/playerOne_CardLibrary" 
     app:layout_constraintBottom_toBottomOf="parent"/> 

現在のレイアウト

layout

+0

文字の間にいくつか入れたり、文字列をchar配列に変更してください。 – Xenolion

+0

@ Xenolionでは、これがどのように行われるかの例を投稿できますか? –

+0

よろしいですか。私にやらせて! – Xenolion

答えて

1

写真のように提供されるコードは、ビューにつながります。それがあなたが欲しいものならば、あなたはそれに従うことができますか、またはあなたが望むものにカスタマイズすることができます!

The code provided will lead to a view as shown in the picture. If it is what you want you can follow along or you can customize it to what you want!:

まずあなたが国境を接するxml drawableを作成する必要があります。これは、テキストの各部分の背景として使用されます。そしてあなたのテキストの各文字または数字の周り。 描画可能フォルダ内のリソースファイルがborder.xml(フルネームres/drawable/border.xml).Copyそれを呼び出し、その中にこれを貼り付けることができますしてください:これはあなたのテキストを境影響をもたらすでしょう

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" > 
     <solid android:color="#00ffffff" /> 
     <stroke android:width="1dip" android:color="#4fa5d5"/> 
     <padding android:left="4dp" android:right="4dp" 
       android:bottom="1dp" android:top="1dp"/>     
    </shape> 

、またに色やパディングを編集することができますあなたのニーズに合ってください。 TextViewをルートビューとしてレイアウトを作成する必要があります。したがって、あなたのレイアウトフォルダにファイルを作成してborder_text_view.xml(フルネームres/layout/border_text_view.xml)と呼ぶことができます。コピーし、その中に以下のコードを貼り付けます。

<?xml version="1.0" encoding="utf-8"?> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/border"/> 

注:背景は、以前に設定されているが描画可能なフォルダからborder.xmlを宣言しました。

境界線のテキストを表示するレイアウトでは、activity_mainと言うことができます(ビューを表示するレイアウトにすることができます)。

そのレイアウトにこれを追加します。あなたのレイアウトのJavaクラス(活動または断片)で次に

....... 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/layout_border"/> 
    ....... 

の上に追加リニアレイアウトへの参照を取得し、次のようにメソッドを呼び出します。

LinearLayout linearLayout=(LinearLayout)findViewById(R.id.layout_border); 
    addBorderedView(this, linearLayout, "8000LP"); 
を次のように

は今の方法addBorderedViewします

private void addBorderedView(Context context, LinearLayout layout, String string_to_display) { 
    String[] array = string_to_display.split(""); 
    for (int i = 1; i < array.length; i++) { 
     TextView borderedTextView = (TextView) LayoutInflater.from(context).inflate(R.layout.border_text_view, null); 
     borderedTextView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
     borderedTextView.setGravity(Gravity.CENTER); 
     borderedTextView.setText(array[i]); 
     LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) borderedTextView.getLayoutParams(); 
     params.setMargins(2, 0, 2, 0); //substitute parameters for left, top, right, bottom 
     borderedTextView.setLayoutParams(params); 
     layout.addView(borderedTextView); 
    } 
} 

回表示するにはこのように大きな文章を表示する予定がある場合は、ビューの所有者を作成する必要があります。

+0

それを試してみてください。今のところ、詳細な説明については、賛否両論あります。それは私のモバイルideで動作する場合、それは答えとして悪いacxept! –

+0

'addBorderedView(this、linearLayout、" 8000LP "); '私は3"予期しない宣言の終わりを与えている "エラー –

+0

私は何が起こっているのかわからないが、それは私のアンドロイドスタジオプロジェクトで正常に動作します!コンテキストActivityNameを使用してみてください。これは、 'MainActivity.this'は' onCreate() 'のようなあなたのアクティビティメソッドのメソッドも呼び出します。また、ブラケットが整理されているかどうかを確認します。それとは別に、コードはうまく動作し、フラグメント内の文脈も 'getActivity()' – Xenolion

関連する問題