Как "андроид: передний план" и "андроид: foregroundGravity" в FrameLayout влияют на его внешний вид?
FrameLayout имеет атрибуты android:foreground
, android:foregroundGravity
и android:measureAllChildren
.
Я пробовал эти атрибуты, но не мог понять, как они влияют на внешний вид макета или как они работают.
<FrameLayout 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:foreground="@android:color/holo_blue_dark"
android:foregroundGravity="center"
android:measureAllChildren="true"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.framelayoutdemo.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_dialog" />
</FrameLayout>
У меня есть googled, но я не могу найти помощь с этими атрибутами.
Пожалуйста, предоставьте мне ссылку, на которую я могу ссылаться или помочь мне с примером.
Благодаря
Ответы
Ответ 1
android:foreground
указывает на передний план, который ваш Framelayout
должен рисовать поверх всех своих дочерних элементов
android:foregroundGravity
указывает на серьезность этого актива, если этот актив является приемлемым. Это означает, что если вы используете
android:foreground="@android:drawable/bottom_bar"
Затем ваш drawable нарисован поверх всех его детей и расположен в центре Framelayout
android:measureAllChildren :
Определяет, следует ли измерять все дети или только те, которые находятся в состоянии VISIBLE
или INVISIBLE
при измерении. По умолчанию false. Это означает, что если он установлен в значение false, то все элементы в состоянии GONE
не принимаются во внимание при фазе измерения Framelayout
.
Надеюсь, что ответит на ваш вопрос.
Ответ 2
Если measureallchildren установлен в "true", он покажет фактическую ширину и высоту структуры кадра, даже если видимость представлений находится в пропущенном состоянии. Например
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myframe"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:measureAllChildren="true"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:src="@drawable/ic_launcher"/>
</FrameLayout>
Ниже приведен код MainActivity.java. если мы используем тост, чтобы отобразить высоту и ширину на экране.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myframe_activity);
FrameLayout frame=(FrameLayout)findViewById(R.id.frame);
frame.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int width = frame.getMeasuredWidth();
int height = frame.getMeasuredHeight();
Toast.makeText(getApplicationContext(),"width="+width+" height="+height,Toast.LENGTH_SHORT).show();
}
}
если мы запустим приложение в эмуляторе, то вывод в виде сообщения Toast будет таким: width = 72 height = 72
Теперь, если мы изменим значение measureAllChildren на false, то ширина и высота структуры выходного кадра сообщения Toast будут: width = 0 height = 0