0

アプリ内から特定のテキストビューのサイズを大きくしようとしています。メニュー項目の選択でやりたいのですが、問題があります。私は次のことを試しました:

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Create an options menu for the activity
    super.onCreateOptionsMenu( menu );

    incrseTxtMenu = menu.add( 0,4,0,"Increase Text Size" );
    incrseTxtMenu.setIcon( R.drawable.ic_menu_plus );
    incrseTxtMenu.setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() 
    {
        @Override
        public boolean onMenuItemClick(MenuItem item) 
        {
            // handler.sendMessage( handler.obtainMessage() );
            TextView tempTxt = getTextView();
            tempTxt.setTextSize( 25 );

            return true;
        }
    });

    return true;
}

しかし、これはヌルポインタ例外をスローしています。私も intro.setTextSize() を使用してみましたが、同じエラーがスローされます。このメニュー項目からテキストビューにアクセスするにはどうすればよいですか?

**アップデート

//Method used to fetch the textview
public TextView getTextView()
{
    return intro;
}

ログ猫からのエラー:

AndroidRuntime FATAL EXCEPTION: main
java.lang.NullPointerException
at android.omni.Artist_activity$1.handleMessage( Artist_activity.java:32 )

また、ところで-ハンドラを使用してGUIを更新しようとしています-これが必要であると仮定して正しいですか?

**更新 2 XML コード

   <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id = "@+id/tab_one_top_level"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">

      <LinearLayout
      android:orientation = "vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">

      <TextView

    android:id = "@+id/faq_Intro"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "@string/faq_Intro"
    android:typeface = "monospace"
    android:textStyle = "bold"
    android:paddingBottom = "12dp"

      />

      <TextView

    android:id = "@+id/faq_Intro_Info"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "@string/faq_Intro_Info"
    android:textSize = "10dp"
    android:typeface = "monospace"
    android:textStyle = "bold"

      />

      </LinearLayout>
</ScrollView>

何かご意見は?

マイ コード ソリューション

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Create an options menu for the activity
    super.onCreateOptionsMenu( menu );

    incrseTxtMenu = menu.add( 0,1,0,"Increase Text Size" );
    incrseTxtMenu.setIcon( R.drawable.ic_menu_plus );

    decrseTxtMenu = menu.add( 0,2,0,"Decrease Text Size" );
    decrseTxtMenu.setIcon( R.drawable.ic_menu_negate );

    return true;

}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    // Increase size menu item
    if( item.getItemId() == 1 )
    {
        intro.setTextSize( myIntroSize += 5 );
        introInfo.setTextSize( myIntroInfoSize += 5 );

    }
    // Derease size menu item
    else if( item.getItemId() == 2 )
    {
        intro.setTextSize( myIntroSize -= 5 );
        introInfo.setTextSize( myIntroInfoSize -= 5 );
    }
    return true;
}

onCreate() メソッドは、以前と同じようにテキストビューを初期化するだけです。ああ、myIntroSize と myIntroInfoSize の値は、任意に設定できます。

4

3 に答える 3

3

次のコードを試して、うまくいくかどうか教えてください。何が悪いのかわかりません。いくつかの勘に基づいているだけです -

    @Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Create an options menu for the activity
    super.onCreateOptionsMenu( menu );

    incrseTxtMenu = menu.add( 0,4,0,"Increase Text Size" );
    incrseTxtMenu.setIcon( R.drawable.ic_menu_plus );
    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId() == 4){
         TextView tempTxt =  (TextView)findViewById( R.id.faq_intro);
            tempTxt.setTextSize( 25 );
    }

}
于 2012-04-08T16:36:31.910 に答える
2

このスニペットはうまく機能しています。試してみてください。TextView 自体を取得する方法に問題があると思います。「使うべきfindViewbyId(int id)

     @Override
            public boolean onCreateOptionsMenu(Menu menu) {
            // Create an options menu for the activity
            super.onCreateOptionsMenu( menu );

            MenuItem incrseTxtMenu = menu.add( 0,4,0,"Increase Text Size" );
            incrseTxtMenu.setIcon( android.R.drawable.btn_plus );
            incrseTxtMenu.setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() 
            {
                @Override
                public boolean onMenuItemClick(MenuItem item) 
                {
                    TextView tempTxt = (TextView) findViewById(R.id.text);
                    tempTxt.setTextSize( 25 );

                    return true;
                }
            });

        return true;
    }

また、この関数を使用してメニュー選択を処理することをお勧めします。

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        return super.onOptionsItemSelected(item);
    }

setOnMenuItemClickListener を使用しない

編集:ハンドラーを使用していません

于 2012-04-08T16:34:55.537 に答える
1

あなたの問題はあなたが「getTextView();」を呼んでいるときだと思います。

TextView tempTxt = getTextView();
tempTxt.setTextSize( 25 );

また、テキストのサイズを設定するときは、これを使用して、テキストがピクセルであることを確認する必要があります。

tempTxt.setTextSize(TypedValue.COMPLEX_UNIT_PX, 25);

ここを読んでください: TextView.setTextSizeが異常に動作します-異なる画面に対してtextviewのテキストサイズを動的に設定する方法AndroidTextViewsetTextSizeはテキストサイズを 誤って増加させます

作成されるオブジェクトが「findViewById」を使用してXMLからのIDを持っている場合に最適です。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Create an options menu for the activity
super.onCreateOptionsMenu( menu );

MenuItem incrseTxtMenu = menu.add( 0,4,0,"Increase Text Size" );
incrseTxtMenu.setIcon( android.R.drawable.btn_plus );
incrseTxtMenu.setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
    TextView text = (TextView) findViewById(R.id.faq_Intro); //faq_Intro from XML
    tempTxt.setTextSize(TypedValue.COMPLEX_UNIT_PX, 25); //corrected

    return true;
    }
});

return true;
}

また、「OnMenuItemCLickListener」を使用する代わりに、ケーススイッチで「onOptionsItemSelected」を簡単に使用できます。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){

    case R.id.increasesize:  
         //some code
         break;     

    case R.id.exit:  
        finish();
        break;         

    default:
        return true;
    }
于 2012-04-08T16:48:44.820 に答える