2014-08-31 2 views
0

Я хочу создать LinearLayout с двумя TextView s: меткой и заполнителем данных. Поскольку данные могут быть произвольно длинными, я хочу ограничить размер второго TextView одной строкой и автоматически прокручивать по горизонтали, если данные не соответствуют представлению.Автоматическая прокрутка TextView внутри ViewPager

Кроме того, я хочу, чтобы ширина второго TextView рассчитывалась во время выполнения, чтобы он мог заполнить 70% родительского контейнера и быть выровнен по правому краю.

До сих пор это то, что у меня есть:

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

    <TextView 
     android:id="@+id/txtv_label_denunciante" 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.3" 
     android:gravity="left" 
     android:text="@string/txtv_label_denunciante" /> 
    <TextView 
     android:id="@+id/txtv_data_denunciante" 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.7" 
     android:gravity="right" 
     android:maxLines="1" 
     android:ellipsize="marquee" 
     android:scrollHorizontally="true" 
     android:marqueeRepeatLimit="marquee_forever" 
     android:text="@string/txtv_no_data" /> 

</LinearLayout> 

Но текст просто обрезаны. Он не является эллипсированным, и автоматическая прокрутка не работает. Добавление

android:focusable="true" 
android:focusableInTouchMode="true" 

не решает проблему.

Ответ на вопрос this не помог.

Я с радостью принимаю ответ, используя RelativeLayout, если он выполнит желаемый результат, используя меньше кода, или если это невозможно с помощью LinearLayout.

Редактировать

Изменение второй TextView к:

<TextView 
    android:id="@+id/txtv_data_denunciante" 
    android:layout_width="0px" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.7" 
    android:ellipsize="marquee" 
    android:gravity="right" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:singleLine="true" 
    android:text="@string/txtv_no_data" /> 

и добавление

txtvDataDenunciante.setSelected(true); 

зафиксировал его.

+0

Является ли это в ListView? –

+0

Нет, это не внутри ListView. – hallaplay835

ответ

1

Я пробовал этот способ, и он работает. Замените второй TextView на один ниже. Вот результат на прилагаемом скриншоте.

<TextView 
     android:id="@+id/txtv_data_denunciante" 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.7" 
     android:ellipsize="marquee" 
     android:gravity="right" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:scrollHorizontally="true" 
     android:marqueeRepeatLimit="marquee_forever" 
     android:maxLines="1" 
     android:singleLine="true" 
     android:freezesText="true" 
     android:text="@string/txtv_no_data" 
     android:selectAllOnFocus="true" /> 

EDIT: Если атрибуты XML не работают в вашем случае, то проблема о взятии фокуса. В некоторых случаях родительские макеты или некоторые другие сосредотачиваются на себе. Поэтому вам нужно сосредоточиться на конкретном элементе View в RunTime. Для этого вы можете установить свой TextView как выбранный.

yourTextView.setSelected(true); 
+0

Ну, я только что проверил это с чистой планировкой и активностью, и текст не прокручивается. Вместо этого я получаю статическое поведение, как показано [здесь] (http://imgur.com/VjKY8eT). Полный текст - «этот текст слишком длинный, чтобы вписаться в это текстовое представление». – hallaplay835

+0

Как долго ваш текст вписывается в текст? Можете ли вы вставить его здесь, чтобы я мог попробовать его с тем же контентом. Потому что он работает до сих пор для меня. – osayilgan

+0

или это ваш фактический текст? «этот текст слишком длинный, чтобы вписаться в это текстовое представление» – osayilgan

0

Если он есть в ListView, проблема в том, что TextView не получает фокуса. Измени TextView использовать этот один:

public class AutoScrollingTextView extends TextView { 
public AutoScrollingTextView(Context context, AttributeSet attrs, 
     int defStyle) { 
    super(context, attrs, defStyle); 
} 

public AutoScrollingTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public AutoScrollingTextView(Context context) { 
    super(context); 
} 

@Override 
protected void onFocusChanged(boolean focused, int direction, 
     Rect previouslyFocusedRect) { 
    if (focused) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
    } 
} 

@Override 
public void onWindowFocusChanged(boolean focused) { 
    if (focused) { 
     super.onWindowFocusChanged(focused); 
    } 
} 

@Override 
public boolean isFocused() { 
    return true; 
} 
} 

С этими параметрами:

android:scrollHorizontally="true" 
android:ellipsize="marquee" 
android:marqueeRepeatLimit="marquee_forever" 

Как видно здесь: https://stackoverflow.com/a/9707140/1318795

Смежные вопросы