小编AnZ*_*AnZ的帖子

自定义开关 - 轨道和选择器尺寸在21 API以下不能工作

自定义形状开关看起来像这样:

以上API 21

在此输入图像描述

API 21以下

在此输入图像描述

看起来像<size/>块不适<shape/>用于21之前的API.

任何想法如何解决这个问题?


container.xml中:

<Switch
        android:id="@id/switch_follow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:textOff=""
        android:textOn=""
        android:thumb="@drawable/switch_selector"
        android:track="@drawable/switch_track"/>
Run Code Online (Sandbox Code Playgroud)

绘制/ switch_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <layer-list>
        <item
            android:bottom="@dimen/switch_selector_padding"
            android:left="@dimen/switch_selector_padding"
            android:right="@dimen/switch_selector_padding"
            android:top="@dimen/switch_selector_padding">
            <shape
                android:dither="true"
                android:shape="oval"
                android:useLevel="false"
                android:visible="true">
                <gradient
                    android:angle="270"
                    android:endColor="@color/primary_white"
                    android:startColor="@color/primary_white"/>
                <corners
                    android:radius="@dimen/switch_radius"/>
                <size
                    android:width="@dimen/switch_track_height"
                    android:height="@dimen/switch_track_height" />
            </shape>
        </item>

    </layer-list>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)

绘制/ switch_track.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:dither="true"
android:shape="rectangle"
android:useLevel="false"
android:visible="true">
<gradient
    android:angle="270"
    android:endColor="@color/primary_yellow_dark_v2"
    android:startColor="@color/primary_yellow_dark_v2"/>
<corners android:radius="@dimen/switch_radius" />
<stroke
    android:width="@dimen/switch_stroke_height"
    android:color="@android:color/transparent">
</stroke> …
Run Code Online (Sandbox Code Playgroud)

xml android android-switch

19
推荐指数
1
解决办法
5539
查看次数

在旋转时更改MediaController位置

我试图MediaController在方向变化上动态改变锚点.经过我的所有尝试后,这根本不能正常工作.

也许你可以指出我的错误.

简而言之:

肖像模式:

  1. weightSum = 1.
  2. SurfaceView 重量:0.4
  3. MediaControllerHorizontalScrollView重量:0.6
  4. MediaController 总是可见而不是隐藏

景观模式:

  1. SurfaceView 重量:0.0(全屏)

  2. MediaControlls= View.Gone(我需要将其锚更改为SurfaceView.并弹出onTouch.但是如何?)


代码:

player.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    tools:context="tenkol.design.com.imbrecords.ActivityExoPlayer"
    android:weightSum="1"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/surface_wrapper"
        android:layout_weight="0.4">

        <com.google.android.exoplayer.VideoSurfaceView
            android:id="@+id/surface_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <View
            android:id="@+id/shutter"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/black" />
    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.6"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/controls_wrapper"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp">
        </FrameLayout>

        <HorizontalScrollView
            android:id="@+id/myGallery"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="0dp">

            <LinearLayout
                android:id="@+id/channelsScrollView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:orientation="horizontal"
                android:paddingBottom="5dp"
                android:paddingTop="5dp" …
Run Code Online (Sandbox Code Playgroud)

android android-video-player android-layout android-mediaplayer

15
推荐指数
1
解决办法
1658
查看次数

MPAndroidChart中限制行的自定义视图

是否可以LimitLine用自定义布局替换?所以它看起来像这样:

在此输入图像描述

我看到几个解决方案:

  1. 也许这里有像这样的自定义库中的方法,有没有?
  2. 获取TextView值的存储位置坐标,并在该位置添加自定义布局.但是我怎么能达到这个目的TextView呢?

也许有人遇到了这个问题.请分享您的经验.


编辑:最新的部分解决方案

经过长时间的搜索解决方案,我开始通过Limit Line的坐标以编程方式添加自定义视图.

屏幕总体布局如下:

在此输入图像描述

坐标计算非常简单.X从图表坐标和已知Y:

Y =((max - lastValue)*height)/((max + min)+ y)

所以在这一点上我基本上知道我需要的位置.虽然由于父母的缘故,我不确定这是对的ScrollView.

下一步是在这些坐标处添加自定义布局 (x, y)

在此输入图像描述

这就是新问题.我试图将视图添加到顶部RelativeLayout.它被添加但它不会一起移动ScrollView.因此,需要在Chart上添加该视图.看看我是如何尝试实现这一目标的:

private void addCustomLayoutOnLimitLine(final double lastValue) {

    mChart.post(new Runnable() { //check location when view is created
        public void run() {
            int[] chartLocationOnScreen = new int[2];
            mChart.getLocationOnScreen(chartLocationOnScreen);

            int x = chartLocationOnScreen[0];
            int y = chartLocationOnScreen[1];

            int width = mChart.getWidth();
            int height = …
Run Code Online (Sandbox Code Playgroud)

android mpandroidchart

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

将图片(照片)投射到Chromecast

我以下(1,2)指导创建的Chromecast发送者的Android应用程序,我只在发送图片感兴趣.有很多信息和示例如何投射文本,音频视频.但是没有一个单词如何与图片.

我相信stackoferflow的力量,有人应该遇到这样的问题.请提供一些好的样本或教程.我需要的是使用Media Router及其功能投射全屏图片的指南.

多数民众赞成我如何使用自定义渠道发送短信:

 /**
 * Send a text message to the receiver
 */
private void sendMessage(String message) {
    if (mApiClient != null && mSmartBusChannel != null) {
        try {
            Cast.CastApi.sendMessage(mApiClient,
                    mSmartBusChannel.getNamespace(), message)
                    .setResultCallback(new ResultCallback<Status>() {
                        @Override
                        public void onResult(Status result) {
                            if (!result.isSuccess()) {
                                Log.e(TAG, "Sending message failed");
                            }
                        }
                    });
        } catch (Exception e) {
            Log.e(TAG, "Exception while sending message", …
Run Code Online (Sandbox Code Playgroud)

android casting google-cast chromecast

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

在左右扬声器上播放2个不同的音频流

一些特殊的情况迫使我做那种变态的事情.

是否可以在不同的频道上播放2个不同的音频流.想象一下耳机,我需要同时播放左扬声器的第一首歌和右扬声器的第二首歌.

经过一些研究,我发现可以在某个单一频道播放.甚至可以关闭其中一个.但我没有找到任何有关如何同时播放2个音频流的信息.

它甚至可能吗?如何?一些代码示例和链接赞赏!


研究结果.

1)AudioTrack能够在不同的频道上播放

// only play sound on left
for(int i = 0; i < count; i += 2){
    short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
    samples[i + 0] = sample;
    samples[i + 1] = 0;
}
// only play sound on right
for(int i = 0; i < count; i += 2){
    short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
    samples[i …
Run Code Online (Sandbox Code Playgroud)

audio android

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

Kotlin 1.2.21 + SimpleXml 2.3.0 - 消耗List错误(必须标记set get方法)

我正在尝试通过Retrofit 2使用SimpleXML来使用XML.经过几个小时与Kotlin的挣扎,我决定尝试Java版本,然后转换到Kotlin.Java版本运行良好......

错误:

java.lang.RuntimeException: org.simpleframework.xml.core.MethodException: Annotation @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, name=entry, required=true, type=void) must mark a set or get method
Run Code Online (Sandbox Code Playgroud)

我需要一个能够使用该XML的Kotlin模型类.这是输入:

<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>
Run Code Online (Sandbox Code Playgroud)

Java模型类版本(工作正常):

@Root(name = "feed", strict = false)
public class MFeed {
    @ElementList(name = "entry", inline = true)
    private List<MEntry> entriesList;

    public MFeed(List<MEntry> entriesList) {
        this.entriesList = entriesList;
    }

    public MFeed() {
    }

    public List<MEntry> getEntriesList() {
        return entriesList;
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

java xml android kotlin retrofit2

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

将拖动项目实现到屏幕边缘功能

当项目在屏幕边缘(左侧或右侧)附近拖动时,我需要实现当前标签更改.

拖拽N下降功能和当前选项卡切换没有问题.我只是无法正确处理此事件 - 当拖动项目靠近屏幕边缘时.

你会怎么做?

我尝试了什么:

<FrameLayout
    android:id="@+id/left_toggle_area"
    android:layout_width="30dp"
    android:layout_height="fill_parent"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true">
</FrameLayout>

<FrameLayout
    android:id="@+id/right_toggle_area"
    android:layout_width="30dp"
    android:layout_height="fill_parent"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true">
</FrameLayout>

<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... />
Run Code Online (Sandbox Code Playgroud)

我们的想法是在切换区域拖动项目时以编程方式更改当前选项卡.

但是该DragEvent.ACTION_DRAG_ENTERED区域的事件从未发生过(我相信如此)GridView整个屏幕占用并且只是与切换区域重叠.

我已经尝试在触发拖动启动事件时将这些区域带到前面.但由于某种原因,这不起作用.

FrameLayout toggleView = (FrameLayout) v;
        toggleView.bringToFront();
        toggleView.requestLayout();
        toggleView.invalidate();
Run Code Online (Sandbox Code Playgroud)

如果有人遇到这样的问题,请分享您的经验.或许还有另一个更好的解决方案.请给我一个提示.

android drag-and-drop android-layout android-viewpager

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

FragmentPagerAdapter没有处理片段的重新创建

我使用的是ViewPagerPagerTabStripfragment A,一切工作正常.项目已填充.......直到我代替AB,然后再替换BA.

片段xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<android.support.v4.view.PagerTabStrip
    android:id="@+id/pager_header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:background="#222222"
    android:textColor="@color/blue" />

</android.support.v4.view.ViewPager>
Run Code Online (Sandbox Code Playgroud)

Debuggin显示在getItem(int position)从未达到第二次替换后FragmentPagerAdapter.标签是空的.

标签适配器:

    private class ChannelsFragmentPagerAdapter extends FragmentPagerAdapter {
    final int PAGE_COUNT = dataChannelsList.size();

    public ChannelsFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return dataChannelsList.get(position).getLang();
    } …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-fragments android-viewpager android-tabs

6
推荐指数
1
解决办法
1453
查看次数

在相同片段的不同实例之间进行通信

问题如下.让我们有3个带片段的标签:

  • 表1(片段A).需要将数据发送到Tab 2.
  • 表2(片段B).需要从Tab 1接收数据.
  • 表3(片段B).已经包含数据.

如您所见,选项卡3和选项卡2包含相同的片段但不同的实例.

如何将数据(不是通过参数)发送到Tab 2?

我尝试过的:

  1. 片段B在创建时通过参数设置唯一ID.
  2. Local Broadcast Receiver对片段B的两个实例注册相同
  3. 使用其ID将数据从片段A发送到片段B.
  4. 在片段B中onReceive()检查接收的ID是否等于片段的ID

但不幸的是,广播仅被发送到Tab 3.


编辑:更多信息.

这些选项卡托管在另一个片段中ViewPager.这是因为它们的组合NavigationDrawerViewPager提到的Tabs和Tabs有关.

tabs android broadcastreceiver android-fragments android-broadcast

6
推荐指数
2
解决办法
751
查看次数

导航抽屉列表中的下划线菜单项

如何在导航抽屉中下划线菜单项?

期望:

在此输入图像描述

现实:

在此输入图像描述

@菜单/ activity_navigation_drawer:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_open_account"
        android:title="@string/na_navigate_open_account" />
    <item
        android:id="@+id/nav_login"
        android:title="@string/na_navigate_login" />
    <item
        android:id="@+id/nav_stock_signals"
        android:title="@string/na_navigate_stock_signals" />

    ...

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

导航抽屉活动布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="end">

<include
    layout="@layout/app_bar_navigation"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:fitsSystemWindows="true"
    android:background="@color/primary_asphalt_dark"
    app:headerLayout="@layout/nav_header_navigation"
    app:menu="@menu/activity_navigation_drawer" /> 

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

告诉我是否需要更多代码.

xml android menuitem navigation-drawer

3
推荐指数
1
解决办法
3126
查看次数