2011-10-19 3 views
3

TextView가있는 앱 위젯이 있습니다.RemoteViews + TextView + setGravity

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/widgetText" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="@string/defaultWidgetText" 
    android:gravity="center" 
    /> 
</FrameLayout> 

것은 내가 리모트 뷰에서

views.setInt(R.id.widgetText, "setGravity", Gravity.CENTER); 

를 호출하여 텍스트 정렬을 변경하기 위해 노력하고있어. 하지만 그것은 "문제 로딩 위젯"을 만듭니다. 다른 setInt (...)는 정상적으로 작동합니다.

다른 TextViews 또는 레이아웃을 만들고 싶지 않습니다. 중력을 바꿀 수있는 다른 방법이 있습니까?

답변

-1

그래서 ... 여기 내 해결책이 있습니다. 위젯 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/top_left_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="top|left" 
    /> 
<TextView 
    android:id="@+id/top_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="top|center_horizontal" 
    /> 
<TextView 
    android:id="@+id/top_right_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="top|right" 
    /> 

<TextView 
    android:id="@+id/left_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="left|center_vertical" 
    /> 
<TextView 
    android:id="@+id/center_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="visible" 
    android:gravity="center" 
    /> 
<TextView 
    android:id="@+id/right_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="right|center_vertical" 
    /> 

<TextView 
    android:id="@+id/bottom_left_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="bottom|left" 
    /> 
<TextView 
    android:id="@+id/bottom_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="bottom|center_horizontal" 
    /> 
<TextView 
    android:id="@+id/bottom_right_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="bottom|right" 
    /> 
</FrameLayout> 

와의 onUpdate (...) 방법

widgetViews = new Hashtable<Integer, Integer>(); 

widgetViews.put(GRAVITY_TOP_LEFT, R.id.top_left_text); 
widgetViews.put(GRAVITY_TOP, R.id.top_text); 
widgetViews.put(GRAVITY_TOP_RIGHT, R.id.top_right_text); 

widgetViews.put(GRAVITY_LEFT, R.id.left_text); 
widgetViews.put(GRAVITY_CENTER, R.id.center_text); 
widgetViews.put(GRAVITY_RIGHT, R.id.right_text); 

widgetViews.put(GRAVITY_BOTTOM_LEFT, R.id.bottom_left_text); 
widgetViews.put(GRAVITY_BOTTOM, R.id.bottom_text); 
widgetViews.put(GRAVITY_BOTTOM_RIGHT, R.id.bottom_right_text); 

Intent intent = new Intent(context, MinimalisticNotesWidgetActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
for(int id : widgetViews.values()) 
{ 
    views.setViewVisibility(id, View.INVISIBLE); 
} 

int id = widgetViews.get(textGravity); 

views.setOnClickPendingIntent(id, pendingIntent); 
views.setTextViewText(id, widgetText); 
views.setFloat(id, "setTextSize", fontSize); 
views.setInt(id, "setTextColor", textColor); 
views.setViewVisibility(id, View.VISIBLE); 

P.S. 나는이 나쁜 코딩 스타일, 알고 있지만, 인터넷에서 다른 변형은 동일한 = (

1

내 솔루션이었다 같습니다

// Text Align 
int gravity = widget_pf.getInt(Constants.Prefs.WIDGET_TEXT_ALIGN, 2); 
if (gravity == 0) 
    remoteViews.setInt(R.id.BalancesLinLayout, "setGravity", Gravity.LEFT); 
else if (gravity == 1) 
    remoteViews.setInt(R.id.BalancesLinLayout, "setGravity", Gravity.CENTER_HORIZONTAL); 
else 
    remoteViews.setInt(R.id.BalancesLinLayout, "setGravity", Gravity.RIGHT); 

그리고 widget_layout.xml에 :

<LinearLayout 
    android:id="@+id/BalancesLinLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

     <TextView 
      android:id="@+id/SampleText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ellipsize="marquee" 
      android:singleLine="true" 
      android:textColor="#FFFFFF" 
      android:textSize="9sp" /> 

</LinearLayout> 

지금까지 매우 간단했습니다.

관련 문제