Android: установите RelativeLayout.LayoutParams, но позже получите FrameLayout.LayoutParams

1

Я построил свой собственный макет ScrollView, как показано ниже

public class MyScrollView extends ScrollView {

RelativeLayout mContentView = null;
public MyScrollView(final Context context) {
    super(context);

    RelativeLayout.LayoutParams adaptLayout = new RelativeLayout.LayoutParams(320, 480);
    adaptLayout.setMargins(0, 0, 0, 0);
    setLayoutParams(adaptLayout);

    mContentView = new RelativeLayout(context);
    RelativeLayout.LayoutParams adaptLayout2 = new RelativeLayout.LayoutParams(300, 960);
    adaptLayout2.setMargins(0, 0, 0, 0);
    mContentView.setLayoutParams(adaptLayout2);

    Button btn = new Button(context);
    btn.setText("start dialog");
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mContentView.getLayoutParams();
            params.height = 1000;
            setLayoutParams(params);
            MyScrollView.this.invalidate();
        }

    });
}

Однако я получил тип FrameLayout.LayoutParams позже, используя getLayoutParams().
Действительно запутывающее поведение... Любая идея? Спасибо.

05-25 02: 06: 58.082: ERROR/AndroidRuntime (219): java.lang.ClassCastException: android.widget.FrameLayout $LayoutParams
05-25 02: 06: 58.082: ERROR/AndroidRuntime (219): at com.example.hello.MyScrollView $1.onClick(MyScrollView.java:42)
05-25 02: 06: 58.082: ОШИБКА /AndroidRuntime (219): at android.view.View.performClick(View.java:2344)
05-25 02: 06: 58.082: ERROR/AndroidRuntime (219): at android.view.View.onTouchEvent(View.java:4133)

  • 0
    Когда у меня возникла похожая проблема, я создал новую LinearLayout вокруг своих видов и получил ссылку на это. Но я не могу полностью понять вашу проблему.
Теги:
view
android-layout

1 ответ

0

Вы можете отобразить код, когда получаете макет Params??, я думаю, что вы должны направить свои параметры в RelativeLayout.LayoutParams, сделайте что-то вроде этого:

adaptLAyout = (RelativeLayout.LayoutParams)myRelativeLayout.getLayoutParams();

EDIT: я вижу, что у вас есть собственный ScrollView, так что вы можете сказать мне, где вы его используете? Я думаю, что вы используете его в FrameLayout?? попробуйте использовать его в RelativeLayout, что устранит проблему, потому что когда вы получаете LayoutParams, он ссылается на родительский макет вашего представления, поэтому, если вы используете scrollView в FrameLAyout, вы должны работать с FrameLAyout.LayoutParams или вы должен использовать его в RelativeLayout,

  • 0
    Я сделал именно то, что вы сделали, но было исключение ClassCastException. Я обнаружил, что реальный тип был FrameLayout.LayoutParams в тот момент при отладке.
  • 0
    Вы можете добавить исключение LogCat, ?? у вас где-то есть FrameLayout, и когда вы пытаетесь получить параметры вашего представления, андроид говорит вам преобразовать параметры в FrameLayout.LayoutParams и добавить свой Xml тоже, вы уверены, что в вашем макете xml нет FrameLayout?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню