Android: Установить поля в FrameLayout программно - не работает
вот код-
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) searchPin.getLayoutParams();
params.setMargins(135, 176, 0, 0);
//params.leftMargin = 135; // also not worked
//params.topMargin = 376;
searchPin.setLayoutParams(params);
где бы то ни было, из xml его рабочий -
android:layout_marginLeft="135dp"
что может быть причиной? я что-то пропустила!
-спасибо!
6 ответов
У меня был ребенок FrameLayout RelativeLayout, поэтому фреймворк пытался привести параметры FrameLayout к RelativeLayout, я решил так
FrameLayout mylayout = (FrameLayout) view.findViewById(R.id.mylayout);
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) mylayout.getLayoutParams();
params.setMargins(1, 2, 3, 4);
mylayout.setLayoutParams(params);
Я думаю, что вам не хватает того, что, когда вы программно устанавливаете параметры для элемента, эти параметры фактически предоставляются родительскому представлению, чтобы он знал, как расположить элемент. Параметры не возвращаются к самому элементу. Рассмотрим следующий пример кода. Также обратите внимание, что параметры макета относятся к типу родителя.
LinearLayout linearLayout = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(6,6,6,6);
Button someButton=new Button(this);
someButton.setText("some text");
linearLayout.addView(someButton, layoutParams);
простое решение-
searchPin = (ImageView) findViewById(R.id.waypts_search_pin);
searchPin.setPadding(135, 176, 0, 0);
вы можете попробовать это
FrameLayout.LayoutParams srcLp = (FrameLayout.LayoutParams)searchPin.getLayoutParams();
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(srcLp.width, srcLp.height, srcLp.gravity);
lp.setMargins(srcLp.leftMargin, srcLp.topMargin, srcLp.rightMargin, srcLp.bottomMargin);
searchPin.setLayoutParams(lp);
просто используйте LayoutParams вместо FrameLayout.LayoutParams
LayoutParams params = (LayoutParams) searchPin.getLayoutParams();
params.setMargins(135, 176, 0, 0);
searchPin.setLayoutParams(params);
это работает для меня