如何在Android上制作FullScreen活动

时间:2016-02-20 15:03:21

标签: android android-layout android-fullscreen

好的,所以我试图复制开源的Roman Nurik的Muzei Live Wallpaper应用程序的外观和感觉。

(在这里查看他的GitHub存储库 - https://github.com/romannurik/muzei/

当App推出时,会有一个微妙的svg路径跟踪动画以及在后台进行的Ken Burns效果。

您可以注意到该活动会流入状态栏和导航栏。

我已经能够实现背景动画,但是还没有能够弄清楚如何使活动全屏显示如下面的第二个GIF

我需要帮助将此活动全屏/放入状态栏和导航栏。

这是我能够实现的目标

Here's what I have been able to achieve

这就是我要实现的目标

This what I want to implement

这是我的代码

MainActivity.Java

package devexchanges.info.kenburnview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.Toast;

import com.flaviofaria.kenburnsview.KenBurnsView;
import com.flaviofaria.kenburnsview.RandomTransitionGenerator;
import com.flaviofaria.kenburnsview.Transition;


public class MainActivity extends AppCompatActivity {

    private KenBurnsView kenBurnsView;
    private boolean isPlay = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        kenBurnsView = (KenBurnsView) findViewById(R.id.image);


        AccelerateDecelerateInterpolator ACCELERATE_DECELERATE = new AccelerateDecelerateInterpolator();
        RandomTransitionGenerator generator = new RandomTransitionGenerator(11000, ACCELERATE_DECELERATE);
        kenBurnsView.setTransitionGenerator(generator); //set new transition on kenburns view

        kenBurnsView.setTransitionListener(onTransittionListener());

    }

    private KenBurnsView.TransitionListener onTransittionListener() {
        return new KenBurnsView.TransitionListener() {

            @Override
            public void onTransitionStart(Transition transition) {
                //Toast.makeText(MainActivity.this, "start", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onTransitionEnd(Transition transition) {
                //Toast.makeText(MainActivity.this, "end", Toast.LENGTH_SHORT).show();
            }
        };
    }
}

activity_main.xml中

<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"
    tools:context=".MainActivity">

    <com.flaviofaria.kenburnsview.KenBurnsView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/saigon"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button android:background="@drawable/circle_button"
        android:layout_height="@dimen/intro_activate_button_size"
        android:layout_width="@dimen/intro_activate_button_size"
        android:text="ACTIVATE"
        android:textAllCaps="true"
        android:fontFamily="sans-serif-condensed"
        android:textStyle="bold"
        android:textSize="18dp"
        android:textColor="#333"
        android:id="@+id/activate_muzei_button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="103dp"
        android:elevation="2dp" />

9 个答案:

答案 0 :(得分:14)

只需在style.xml中添加:

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>

答案 1 :(得分:2)

要使活动全屏显示,请将其放入清单中:

<activity android:name=".ActivityName"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

来源: Fullscreen Activity in Android?

答案 2 :(得分:2)

只需将其添加到您的onCreate()方法:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

答案 3 :(得分:1)

事实证明,这个问题有一个简单的解决方案。我只需要使状态栏和导航栏透明。

发布API 21我们可以这样编程 -

getWindow().setStatusBarColor(Color.TRANSPARENT);

使它适用于较低的Android版本,我只需要在/res/values-v21/styles.xml中通过xml添加透明度

<item name="android:statusBarColor">@android:color/transparent</item>

这是最后的效果

enter image description here

答案 4 :(得分:0)

只需在您的活动onCreate()

中添加此代码即可
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

答案 5 :(得分:0)

如果您正在使用AppCompat活动,请使用@ style / Theme.AppCompat.Light.NoActionBar

 <activity android:name=".view.activity.SplashActivity"
                  android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

答案 6 :(得分:0)

您可以通过编程方式做到这一点:

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

阅读此内容:Fullscreen Activity in Android?

答案 7 :(得分:0)

Kotlin:以编程方式针对API 21:将其放入onCreate()

@TargetApi(21)
 window.statusBarColor = Color.TRANSPARENT

答案 8 :(得分:0)

在 2021 年,所有代码要么已弃用,要么不起作用。例如:

# 4-MAR-21
rows = df.loc[df['DATE'] == '2-MAR-21, :]
rows['DATE] = '3-MAR-21'
df = df.append(rows, ignore_index=True)

# 5-MAR-21
rows = df.loc[
    (df["DATE"] == "2-MAR-21") & ((df["Loan ID"] == "L1") | (df["Loan ID"] == "L3")), :
]
rows["DATE"] = "4-MAR-21"
df = df.append(rows, ignore_index=True)

# Sort values
df = df.sort_values(by=["DATE"], ascending=True, inplace=False)
df = df.reset_index(drop=True)

每行都已弃用。其他一些需要 API 级别 R。所以使用样式。

在谷歌上搜索一段时间我发现

export shot=abc_123

现在在 Manifest 文件中使用这个样式

View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    // Set the content to appear under the system bars so that the
                    // content doesn't resize when the system bars hide and show.
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    // Hide the nav bar and status bar
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);

我在从 API 21 到 30 的生产应用程序中使用此代码块。工作正常。甚至用户与他们的 SMS 或通知进行交互。当他们回到我的应用时,它又变成全屏了。