Некорректная работа TextView c атрибутом layout_weight 5.0

Интерфейс, диалоги, темы, стили, меню
Ответить
bigemotig
Сообщения: 2
Зарегистрирован: 22 мар 2014, 12:27

Некорректная работа TextView c атрибутом layout_weight 5.0

Сообщение bigemotig » 13 июн 2015, 23:04

Здравствуйте, столкнулся с непонятной проблемой. На пятом андроиде текст в TextView, который имеет атрибут layout_weight = 1, при клике на кнопку текст "FUN" в TextView не изменяется.

Разметка фрагмента:

Код: Выделить всё

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/funText"
            android:text="FUN"
            android:layout_weight="1"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/funBtn"
            android:text="FUN"
            android:layout_weight="1"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
    </LinearLayout>

</RelativeLayout>
Код фрагмента:

Код: Выделить всё

package examplecom.kraden.test_weight;

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

/**
 * A placeholder fragment containing a simple view.
 */
public class MainActivityFragment extends Fragment {
    TextView txt;
    Button btn;

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }

    @Override
    public void onStart() {
        super.onStart();
        txt = (TextView)getActivity().findViewById(R.id.funText);
        btn = (Button)getActivity().findViewById(R.id.funBtn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int length = txt.getText().length();

                if(length == 0)
                    txt.setText("FUN");
                else
                    txt.setText("");
            }
        });
    }
}
Если удалить android:layout_weight="1" и layout_width сделать wrap_content все работает нормально, но верстка разваливается без весов. Как быть?

Тестировал на 4.3, 2.3.6 - работает нормально, а на 5.0 нет.
Баг или фича? :)
PS папку src приложил, полностью проект не залился сюда
Вложения
src.zip
(25.4 КБ) 158 скачиваний

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Некорректная работа TextView c атрибутом layout_weight 5

Сообщение Dark67 » 14 июн 2015, 11:19

А так пробовал?

[syntax=java]public class MainActivityFragment extends Fragment {
TextView txt;
Button btn;

public MainActivityFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, container, false);

txt = (TextView)v.findViewById(R.id.funText);
btn = (Button)v.findViewById(R.id.funBtn);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int length = txt.getText().length();

if(length == 0)
txt.setText("FUN");
else
txt.setText("");
}
});
return v;
}

@Override
public void onStart() {
super.onStart();

}
} [/syntax]

bigemotig
Сообщения: 2
Зарегистрирован: 22 мар 2014, 12:27

Re: Некорректная работа TextView c атрибутом layout_weight 5

Сообщение bigemotig » 14 июн 2015, 16:25

Dark67 писал(а):А так пробовал?

[syntax=java]public class MainActivityFragment extends Fragment {
TextView txt;
Button btn;

public MainActivityFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, container, false);

txt = (TextView)v.findViewById(R.id.funText);
btn = (Button)v.findViewById(R.id.funBtn);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int length = txt.getText().length();

if(length == 0)
txt.setText("FUN");
else
txt.setText("");
}
});
return v;
}

@Override
public void onStart() {
super.onStart();

}
} [/syntax]
Не помогло, но спасибо за ответ.

Ответить