2014-03-24 1 views
3

사용자 정의 메뉴를 구현하려고했습니다. 나는 this 질문에 주어진 답을 사용했다. 내 코드에서 이름은 ExpandedMenuItem이지만 모든 예제에서는 IconMenuItemView입니다. 거기서 무슨 일이 일어나고있는거야? 이 문제를 어떻게 해결할 수 있습니까?안드로이드에서 메뉴 항목의 사용자 글꼴 설정

여기 내 코드입니다.

 java.lang.ClassCastException:com.android.internal.view.menu.ExpandedMenuView cannot be cast to android.widget.TextView 

내가 텍스트 뷰에이 캐스팅 수있는 방법 있음을

public class MyActivity extends PreferenceActivity { 

     @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.proximity_alert_menu, menu); 
    getLayoutInflater().setFactory(new Factory() { 

     @Override 
     public View onCreateView(String name, Context context, AttributeSet attrs) {   

         //if(name.equalsIgnoreCase("com.android.internal.view.menu.MenuItem")) {} 
         try { 
          LayoutInflater li = LayoutInflater.from(context); 
          final View view = li.createView(name, null, attrs); 
          new Handler().post(new Runnable() { 
          public void run() { 
          TextView tView = (TextView) view; 
          tView.setTypeface(Config.set_font); 
          tView.setTextColor(Color.RED); 
          } 
        }); 
        return view; 
       } catch (InflateException e) { 
        e.printStackTrace(); 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } 
       return null; 
     } 
     }); 
    return super.onCreateOptionsMenu(menu); 
     } 
    } 

예외 쇼?

+0

사과를 오렌지 주조하려고합니다. 'ExpandedMenuView'를'TextView'로 성공적으로 캐스트하려면'ExpandedMenuView'가'TextView'를 확장해야합니다. – curtisLoew

+0

예. 이것이 문제입니다. 어떻게 해결할 수 있을까요? 나는'TextView'를'name'으로 형변환 할 수있는 * View *를 얻는 것을 의미합니까? 왜 내가이 'ExpandedMenuView'를 받았는지 아십니까? –

답변

1

ViewTextView 또는 아님을 다음과 같이 확인하실 수 있습니다 ...

if (view instanceof TextView) { 
    TextView tView = (TextView) view; 
    tView.setTypeface(Config.set_font); 
    tView.setTextColor(Color.RED); 
} 

뷰가 다음 FontColor이 변경됩니다 TextView 경우.

+0

'TextView'로 반환되지 않습니다. 'TextView'를받는 방법을 아십니까? –

-5
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 

    tf = Typeface.createFromAsset(MainActivity.this.getAssets(), 
      "MuseoSansCyrl.otf"); 
    MenuItem i = menu.findItem(R.id.item1); 
    TextView itemuser = (TextView) i.getActionView(); 

      Typeface tf= Typeface.createFromAsset(this.getAssets(), "MuseoSansCyrl.otf"); 
      itemuser.setTypeface(tf); 
      itemuser.setText("Item1"); 
      itemuser.setBackgroundColor(Color.TRANSPARENT); 
      retun true; 
} 
+0

이 코드 블록이 질문에 대답 할 수도 있지만 왜 그렇게하는지 이유를 설명 할 수 있다면 가장 좋습니다. – David

+0

설명이있는 코드를 게시해야합니다. –

관련 문제