小编Cil*_*nco的帖子

向下滑动可扩展工具栏

在我的应用程序中,我有一个折叠工具栏.如果我启动一个特定的片段,我想要折叠工具栏,使其表现得像一个"正常",并且用户不能自己花费它.这是我用于工具栏的布局:

<android.support.design.widget.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:titleEnabled="false"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:src="@drawable/drawer_background"
            app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
            android:layout_width="match_parent"
            android:layout_height="172dp"
            android:scaleType="centerCrop"
            app:layout_collapseMode="parallax"
            android:minHeight="100dp" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolBar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:layout_scrollFlags="scroll|enterAlways" />

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)

我也可以从代码中折叠布局,如下所示:

appBarLayout.setExpanded(false, false);

final AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
params.setScrollFlags(0);
collapsingToolbarLayout.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)

但这没有用.如果用户从工具栏向下滑动,它将展开.

你有什么想法吗?

android android-toolbar android-appbarlayout

12
推荐指数
2
解决办法
4618
查看次数

每天创建通知

我想在每天上午8:00创建通知.我在SQLite数据库中有一些数据,此时我每天都想从中获取数据并从中创建通知.创建新通知没有问题,但我现在每天如何显示它?

我想我必须使用服务但是如何告诉系统在特殊时刻启动此服务?我应该使用什么样的服务?我想如果系统调用该服务,它会启动一个特定的功能,我可以运行我的代码连接到数据库并创建并将我的通知发送到系统吗?

我无法理解的是,如果我在我的主Activity中注册该服务,为什么系统会在用户关闭我的应用程序时启动服务?任何人都可以向我解释一下吗?我总是认为如果我的主要活动被破坏,服务也会被破坏.

service notifications android

11
推荐指数
1
解决办法
9150
查看次数

使波纹填满整个视图

在我的应用程序中,我想创建一个填充整个视图的涟漪.因为它不能正常工作我创建了一个最小的示例应用程序,并在那里尝试但没有成功.

我的布局看起来像这样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent" android:padding="16dp">

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/ripple"
        android:onClick="onViewClicked" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我的drawable定义如下:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#1E88E5"
    android:radius="0dp">

    <item
        android:id="@android:id/mask"
        android:drawable="@android:color/white" />

</ripple>
Run Code Online (Sandbox Code Playgroud)

这是一个视频当前的样子.我希望这个圈子(我认为它正式称为热点)从middel成长,直到它填满整个圈子View.我不是在谈论有意识地设置为0dp的纹波半径.你有什么想法我能做到这一点吗?

编辑:最后我想实现这样的目标.

对于每个不想阅读所有答案的人:我设法实现它并为此创建一个repo.可以在项目中自由使用,并向我发送拉取请求.

android ripple android-resources android-drawable rippledrawable

10
推荐指数
1
解决办法
1146
查看次数

在同一活动中RecyclerView项和CollapsingToolbar之间的共享元素动画

在我的应用程序中,我有一个通过RecyclerView适配器显示的项目列表.如果我点击一个项目Fragment,则在同一个项目中启动Activity.我的项目的布局和我的活动看起来(简化)像这样:

活动布局:

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout>

        <android.support.design.widget.CollapsingToolbarLayout>

            <ImageView
                android:id="@+id/image"
                android:transitionName="image" ... />

            <android.support.v7.widget.Toolbar ... />

        </android.support.design.widget.CollapsingToolbarLayout>

        <android.support.design.widget.TabLayout ... />

    </android.support.design.widget.AppBarLayout>

    <FrameLayout... />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

物品布局:

<RelativeLayout >

    <ImageView
        android:id="@id/itemImage"
        android:transitionName="image" />

    <LinearLayout>

        <TextView ... />

        <TextView ... />

    </LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

现在,如果新片段通过项目点击开始,我想的物品图像的动画添加到ImageView的CollapsingToolbarLayout.我阅读了有关ShareElement动画的文章,但这不适用于此,因为这不是真正的ShareElement动画.目标ImageView不在新片段中,我也不必开始新活动(我只ImageView在新的目标中显示目标Fragment).那么在这种情况下如何创建这样的动画呢?

animation android android-animation android-layout android-view

9
推荐指数
1
解决办法
1286
查看次数

调用RequestInterruptionFilter后电话不响铃

我目前正在开发一个可以改变设备环形模式的应用程序.为此,我创建了一个,NotificationListenerService并且从我的代码中我打电话requestInterruptionFilter来改变环模式.这里的一切都很棒!

现在,当我测试应用程序时,它出现了以下情况:我的手机上接到一个电话,在我的应用程序设置之后很短的时间,INTERRUPTION_FILTER_ALL但我的手机没有振铃.所以我在模拟器中尝试了相同的操作,我可以控制电话呼叫,它也会出现同样的奇怪行为:当INTERRUPTION_FILTER_ALARMS设置了ie 并且呼叫进来时我们设置INTERRUPTION_FILTER_ALL(在接听电话之前)电话没有响铃.

您是否有任何想法如何实现手机在这种情况下响铃?

编辑:我目前的代码如下:

public class NotificationService extends NotificationListenerService implements PhoneCallListener  {

    @Override
    public void onCreate() {
        super.onCreate();

        callReceiver = new CallReceiver(this);
        callReceiver.setListener(this);

        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_PHONE_STATE_CHANGED);

        registerReceiver(callReceiver, filter);
     }

     @Override
     public void onPhoneCallIncoming(String phoneNumber) {
         requestInterruptionFilter(INTERRUPTION_FILTER_ALL);
     }

     @Override
     public void onPhoneCallEnded() {
         Log.d("cilenco", "Phone call ended");
    }
}

public class CallReceiver extends BroadcastReceiver {

    public void setListener(PhoneCallListener listener) {
        this.listener = listener;
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

android notification-listener android-phone-call

9
推荐指数
0
解决办法
112
查看次数

S-View盖检测[磁传感器]

我想为Samsung S-View封面编写一个应用程序.要确定盖子是否关闭,我想使用盖子中的磁铁而不是光传感器.我试着用我自己的Android磁性API:

SensorManager manager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor s = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
manager.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL);

tv.setText(event.values[2]);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何解释这些数字.当然我也试过了x轴和y轴.它们取决于我如何握住手机的轴,如果我的手机后面或前面有翻盖,则没有太大的区别.您是否有任何想法如何使用磁传感器查看封面是否在手机前?我是否必须使用未经校准的传感器或者我是否做了其他错误的操作?

android android-sensors samsung-mobile

8
推荐指数
1
解决办法
2026
查看次数

Activity和Fragment中的自动UI配置更改处理有时会失败

我已经写了很长时间的Android应用程序,但现在我遇到了一个我从未想过的问题.这是关于Android的生命周期Activitys,并Fragments在有关的配置更改.为此,我用这个必要的代码创建了一个小应用程序:

public class MainActivity extends FragmentActivity {

    private final String TAG = "TestFragment";
    private TestFragment fragment;

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

        FragmentManager fm = getSupportFragmentManager();
        fragment = (TestFragment) fm.findFragmentByTag(TAG);

        if (fragment == null) {
            fragment = new TestFragment();
            fm.beginTransaction().add(R.id.fragment_container, fragment, TAG).commit();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码TestFragment.需要注意的是我打电话setRetainInstance(true);的onCreate方法,这样的片段没有在配置更改后recrated.

public class TestFragment extends Fragment implements View.OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater li, …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments android-activity

8
推荐指数
1
解决办法
783
查看次数

关于Android O更改的BroadcastReceiver的生命周期

如果我BroadcastReceiver通过mainfest文件声明一个系统广播(例如ACTION_POWER_DISCONNECTED),系统将在每次发送特定广播时调用它,因此BroadcastReceiver的生命周期不受限制.

但也有广播无法通过清单文件注册.对于这些广播,我们必须context.registerReceiver与相应的电话进行通话IntentFilter.假设我为它创建一个BroadcastReceiver BOOT_COMPLETED并context.registerReceiver从中调用,并且从不调用unregisterReceiver此接收器是否也永远存在(直到手机重新启动)?

针对Android O的应用无法再在其清单中为隐式广播注册广播接收器.隐式广播是一种不专门针对该应用的广播.

如果我的猜想是正确的,这将是一个简单的系统更改解决方法(当然你不应该这样做,但它是可能的).那么BroadcastReceiver在BOOT_COMPLETED广播具有相同的生命周期(保持到下一次重启)之后注册的是作为通过清单自动注册的BroadcastReceiver吗?

android android-intent android-broadcastreceiver android-8.0-oreo

8
推荐指数
1
解决办法
3949
查看次数

在Android O中断开广播充电器

现在已经发布了Android O的最终API,并且以下所有广播都没有列入白名单,我遇到以下问题:

在我的应用程序(API的目标25)我现在有一个BroadcastReceiver它侦听的系统事件ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED.现在我想更新我的应用程序以定位Android O,但随着此版本的出现,广播行为发生了巨大变化:

针对Android O的应用无法再在其清单中为隐式广播注册广播接收器.隐式广播是一种不专门针对该应用的广播.

由于两个广播都是隐含的,我只能通过该Context.registerReceiver()方法注册它们,但问题就出现了:一旦我的应用程序被系统杀死或系统清除我的应用程序的内存(由于低 -设备的内存)广播注册将丢失.

为了避免这个问题,我可以使用JobSchedulerAPI和setRequiresCharging方法,ACTION_POWER_CONNECTED但ACTION_POWER_DISCONNECTED我必须使用该registerReceiver方法.

由于我的应用程序控制设备的音量(基于这些事件),因此没有错过任何这些事件非常重要.那么我如何才能安全地侦听Android O中断开连接的电源事件?

顺便说一句.我对WIFI断开事件有同样的问题.

编辑:我希望没有来自前台服务的通知我这样做

android android-jobscheduler android-broadcastreceiver android-8.0-oreo

8
推荐指数
1
解决办法
515
查看次数

不会触发聚合物单击事件

目前我正在尝试使用Polymer的第一步.现在我有一个带有纸质按钮的简单页面,但我无法为其注册点击事件.我试过这段代码:

<paper-button raisedButton 
              id="test"
              class="colored" 
              label="Click"
              link="http://twitter.com"
              on-click="{{ goLink }}">
</paper-button>

<script>
        Polymer('#test', {
            goLink: function(e) 
            {
                window.location.href = e.target.getAttribute('link');
            }
       });
</script>
Run Code Online (Sandbox Code Playgroud)

不会触发click事件.代码有什么问题?第二个问题:我应该使用on-click或on-tab在我的代码中吗?

javascript polymer

7
推荐指数
1
解决办法
2万
查看次数