如何烘干内部活动

时间:2018-10-18 17:35:18

标签: java android

在我项目的所有活动中,我都隐藏了状态栏,并做了许多与活动有关的事情(我的所有活动都具有共同点)。我准备了隐藏状态栏的功能:

void hideStatusBar()
{
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

我如何在我拥有的每个活动中执行此功能(而不仅仅是此一项),而又不将该功能复制粘贴到每个活动中(以免违反DRY)?

3 个答案:

答案 0 :(得分:1)

您可以将其创建为静态实用程序方法。

public final class ActivityUtils {
    private ActivityUtils() {}

    public static void hideStatusBar(final Activity activity) {
        activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
        activity.getWindow().setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}

该活动的使用方式类似于ActivityUtils.hideStatusBar(this)

或者,您可以将此方法签名提取到接口,然后将此逻辑注入到您的活动中。如果您希望某些活动使用略微不同的状态隐藏版本,这将很有帮助。

public interface StatusBarHider {
    void hideStatusBar(final Activity activity);
}

public class DefaultStatusBarHider implements StatusBarHider {
    @Override
    public void hideStatusBar(final Activity activity) {
        activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
        activity.getWindow().setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}

// ex; Possibly Guice or Dagger for injection
public class MainActivity extends Activity {
    @Inject
    private StatusBarHider hider;
    ...
}

答案 1 :(得分:0)

如果所有更改都与活动的视觉效果有关,则可以在style.xml中指定AppTheme中的所有内容

例如,要隐藏状态栏,请使用:

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

然后,使用您主题的所有活动都将保持不变

答案 2 :(得分:0)

 @Autowired    
private EmployeeDAO employeeDAO;