安卓JAVA按钮重置_Android 6.0 菜单键添加全部清除按钮

android6.0的系统没有附带全部清除按钮,不过其大致实现已经添加。

主要模块有:

此模块有开启几个app 就创建几个TaskView

\LINUX\android\frameworks\base\packages\SystemUI\src\com\android\systemui\recents\views\TaskView.java

任务栈,与TaskView关系为1 TaskStackView 对应 N TaskView

\LINUX\android\frameworks\base\packages\SystemUI\src\com\android\systemui\recents\views\TaskStackView.java

最近任务自定义视图,与TaskStackView关系为N TaskStackView 对应 1 RecentsView

\LINUX\android\frameworks\base\packages\SystemUI\src\com\android\systemui\recents\views\RecentsView.java

最近任务页面

\LINUX\android\frameworks\base\packages\SystemUI\src\com\android\systemui\recents\RecentsActivity.java

主要实现:

从TaskView分析,发现其关闭方法在一个包访问权限方法内

方法名为void dismissTask()

另外TaskStackView中有一个获取TaskView数组的方法

List getTaskViews()

那么结合RecentsView类中也有一个获取TaskStackView数组的方法

List getTaskStackViews()

那么我们就可以直接从RecentsView类获取到TaskView对象做逐一关闭(此处关闭需要关闭可视范围类的近期任务,用于动画效果处理,然后再扫描任务列表做全部关闭)

具体流程就是这样。

下面代码实现:

布局:

Index: /LINUX/android/frameworks/base/packages/SystemUI/res/layout/recents.xml

android:id="@+id/clean_all_recent_apps"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="25dp"

android:padding="15dp"

android:layout_gravity="right"

android:background="#00000000"

android:text="@string/clear_all_notifications_text"

android:textColor="#ffffff"

android:textSize="15dp" />

代码:

Index: /LINUX/android/frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java

添加方法:

public void dismissAllTasksAnimated() {

int childCount = getChildCount();

for (int i = 0; i < childCount; i++) {

View child = getChildAt(i);

if (child != mSearchBar) {

TaskStackView stackView = (TaskStackView) child;

stackView.dismissAllTasks();

}

}

}

\LINUX\android\frameworks\base\packages\SystemUI\src\com\android\systemui\recents\views\TaskStackView.java

添加方法:

public void dismissAllTasks() {

post(new Runnable() {

@Override

public void run() {

ArrayList tasks = new ArrayList();

tasks.addAll(mStack.getTasks());

// Remove visible TaskViews

int childCount = getChildCount();

for (int i = 0; i < childCount; i++) {

TaskView tv = (TaskView) getChildAt(i);

tasks.remove(tv.getTask());

tv.dismissTask();

}

int size = tasks.size();

// Remove any other Tasks

for (int i = 0; i < size; i++) {

Task t = tasks.get(i);

if (mStack.getTasks().contains(t)) {

mStack.removeTask(t);

}

}

}

});

}

之后再绑定点击事件

Index: /LINUX/android/frameworks/base/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java

添加全局变量:

private View mClearRecent;

在public void onCreate(Bundle savedInstanceState)方法的setContentView(R.layout.recents);行后面加

//The Clean All Button

mClearRecent = findViewById(R.id.clean_all_recent_apps);

if(mClearRecent != null){

mClearRecent.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mRecentsView.dismissAllTask();

}

});

}

在void updateRecentsTasks()方法中对于mEmptyView操作的地方修改为(mEmptyViewStub隐藏mClearRecent就显示)

// Update the top level view's visibilities

if (mConfig.launchedWithNoRecentTasks) {

if (mEmptyView == null) {

mEmptyView = mEmptyViewStub.inflate();

}

mEmptyView.setVisibility(View.VISIBLE);

mClearRecent.setVisibility(View.GONE);

if (Constants.DebugFlags.App.EnableSearchBar) {

mRecentsView.setSearchBarVisibility(View.GONE);

}

} else {

if (mEmptyView != null) {

mEmptyView.setVisibility(View.GONE);

mClearRecent.setVisibility(View.VISIBLE);

}

if (Constants.DebugFlags.App.EnableSearchBar) {

if (mRecentsView.hasValidSearchBar()) {

mRecentsView.setSearchBarVisibility(View.VISIBLE);

mClearRecent.setVisibility(View.GONE);

} else {

refreshSearchWidgetView();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值