小编dar*_*rja的帖子

在Intellij IDEA/Android Studio中使用合并根标签预览布局

让我们假设我们正在开发基于LinearLayout的复合组件.所以,我们创建这样的类:

public class SomeView extends LinearLayout {
    public SomeView(Context context, AttributeSet attrs) {
        super(context, attrs);

        setOrientation(LinearLayout.VERTICAL);
        View.inflate(context, R.layout.somelayout, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们将使用它LinearLayout作为根somelayout.xml,我们将有额外的视图级别,所以我们使用merge标记:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        android:textSize="20sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some other text"/>
</merge>
Run Code Online (Sandbox Code Playgroud)

但是在IDE中的预览选项卡中,合并始终充当FrameLayout,我们会看到类似的东西: 合并预览

(这是Android Studio,Intellij IDEA也一样,关于Eclipse我不知道)

预览加快了布局的开发速度,即使对于某些布局,它也会失去如此大的帮助.可能有一种方法可以指定,预览应该如何解释merge特定布局中的标签?

android intellij-idea android-layout android-studio android-tools-namespace

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

向ListView最后一个元素添加底部边距

我需要添加添加具有复杂项目背景的ListView:顶部和底部的偶数/奇数和圆角不同.它看起来像这样:

ListView顶部

我已经通过level-list实现了所有这些东西,但还有一件事我想做.现在底部项目靠近屏幕的底部.最好添加一些空间.

ListView底部看起来不太好

我不想为ListView添加底部边距,我只需要最后一项的保证金.

我看到这样做的方式:

页脚

一种破解 - 将带有空TextView的页脚添加到ListView.但是页脚是非常不稳定的东西,它们通常会在notifyDataSetChanged之后消失,并且无法让它们恢复

带透明像素的图像

我让设计师向底部背景资源添加透明像素.不幸的是,在这种情况下,垂直居中完全被打破.例如,有9patch像这样:

9patch

和这样的布局:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
        >
    <!-- View with background with transparent pixels on bottom -->
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
                  android:id="@+id/item"
                  android:background="@drawable/some_bgr"
                  android:padding="10dp"
            >
        <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"
                  android:text="Title"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:text="Detail"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
    </LinearLayout>

    <!-- Just for marking place took by view -->
    <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
                 android:layout_below="@id/item"
                 android:background="#88ff55"
            />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

结果:

结果

如您所见,居中不起作用.不幸.(顺便说一句,如果将此9patch指定为TextView的背景,则居中工作效果很好.如果你知道任何文章,请解释一下,请告诉我.)

在Adapter实现中添加最后一项的下边距

这应该工作,但由于未知的原因,我仍然无法使它工作.我不喜欢这种方式,因为我不喜欢修改代码中的维度.

所以

已经存在想象的方式 - 使用特定的位图和边距构造一些XML drawable.根据drawables概念应该是可能的,但我找不到实现.可能有人知道吗?

还有其他想法吗?

android centering android-drawable

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

Android'可调试'默认值

我试图从代码中获取应用程序的debuggable属性值:

packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);           
int flags = packageInfo.applicationInfo.flags;
isDebugMode = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
Run Code Online (Sandbox Code Playgroud)

我注意到,当清单中未指定debuggable属性时,此代码将其定义为true.文档说它默认是假的.

怎么了?

android android-manifest

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

Android中是否有针对请求代码值的建议?

现在我使用随机数作为请求代码.因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突.可能有任何定义值的做法,不可设计的可碰撞?你怎么看?

android

20
推荐指数
3
解决办法
6750
查看次数

XML序列化中的必需属性

例如,我有要序列化的类

[Serializable]
class Person
{
    [XmlAttribute("name")]
    string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我需要使Name属性成为必需.如何在.NET中执行此操作?

.net xml-serialization

9
推荐指数
3
解决办法
7881
查看次数

FFmpeg:Jpeg文件到AVFrame

我需要使用FFmpeg库将几个jpg文件加入到视频中.但是我在阅读这些文件时遇到了问题.这是一个读取图像文件并生成AVFrame的函数:

AVFrame* OpenImage(const char* imageFileName)
{
    AVFormatContext *pFormatCtx;

    if(av_open_input_file(&pFormatCtx, imageFileName, NULL, 0, NULL)!=0)
    {
        printf("Can't open image file '%s'\n", imageFileName);
        return NULL;
    }       

    dump_format(pFormatCtx, 0, imageFileName, false);

    AVCodecContext *pCodecCtx;

    pCodecCtx = pFormatCtx->streams[0]->codec;
    pCodecCtx->width = W_VIDEO;
    pCodecCtx->height = H_VIDEO;
    pCodecCtx->pix_fmt = PIX_FMT_YUV420P;

    // Find the decoder for the video stream
    AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
    if (!pCodec)
    {
        printf("Codec not found\n");
        return NULL;
    }

    // Open codec
    if(avcodec_open(pCodecCtx, pCodec)<0)
    {
        printf("Could not open codec\n");
        return NULL;
    }

    // 
    AVFrame *pFrame;

    pFrame = …
Run Code Online (Sandbox Code Playgroud)

c jpeg ffmpeg

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

音频流的最佳实践

我正在编写一个从远程服务器播放音频的应用程序.我尝试了几种方法来实现流式音频,但它们对我来说都不够好.这就是我尝试过的:

天真地使用MediaPlayer

就像是:

MediaPlayer player = new MediaPlayer(); 
player.setDataSource(context, Uri.parse("http://whatever.com/track.mp3"));
player.prepare();
player.start();
Run Code Online (Sandbox Code Playgroud)

(或者prepareAsync,不管)

但是MediaPlayer播放远程内容时标准非常不稳定.它经常跌落或停止播放,我无法处理.另一方面,我想实现媒体缓存.但是我没有找到任何方法从MediaPlayer获取缓冲内容以将其保存在设备上的某个位置.

实现自定义缓冲

然后有一个想法是按块下载媒体文件,将它们组合成一个本地文件并播放该文件.由于连接不良,下载整个文件可能会很慢,因此可以下载足够的初始文件,然后开始播放并继续下载和附加本地文件.此外,我们还获得了缓存功能.

听起来像一个计划,但它并不总是有效.它完美地适用于HTC Sensation XE,但在完成这个初始作品后没有停止4.1平板电脑播放.不知道,为什么会这样.我问过这个问题,但没有得到答案.

使用两个MediaPlayers

我创建了两个MediaPlayer实例并试图让它们互相改变.逻辑如下:

  • 开始下载初始媒体
  • 下载后,通过currentMediaPlayer开始播放.其余媒体继续下载
  • 当几乎播放下载的片段(完成前1秒)时,准备具有相同源文件的secondaryMediaPlayer(在播放期间附加)
  • 在currentMediaPlayer结束前261毫秒 - 暂停它,开始辅助,将辅助设置为当前,安排准备下一个辅助播放器.

来源:

private static final String FILE_NAME="local.mp3";
private static final String URL = ...;
private static final long FILE_SIZE = 7084032;

private static final long PREPARE_NEXT_PLAYER_OFFSET = 1000;
private static final int START_NEXT_OFFSET = 261;

private static final int INIT_PERCENTAGE = 3;

private MediaPlayer mPlayer;
private MediaPlayer mSecondaryPlayer; …
Run Code Online (Sandbox Code Playgroud)

streaming android android-mediaplayer

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

WPF Decorator类有用吗?

我需要创建控件来围绕其子项绘制边框.所以,我创建了类并从Decorator派生出来:

class RoundedBoxDecorator : Decorator
{
    protected override Size ArrangeOverride(Size arrangeSize)
    {
        //some source
    }

    protected override void OnRender(DrawingContext dc)
    {
        //some source
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我对使用Decorator作为祖先有一些疑问.我在MSDN中发现它中没有特殊的方法或属性,只是从它的祖先(UIElement或FrameworkElement)派生而来.ArrangeOverride和OnRender也是派生的.

那么,Decorator类的设计是什么,使用它有意义吗?或者我可以从FrameworkElement派生出来?

.net wpf decorator

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

WPF DialogResult声明性地?

在WinForms中,我们可以为按钮指定DialogResult.在WPF中,我们只能在XAML中声明取消按钮:

<Button Content="Cancel" IsCancel="True" />
Run Code Online (Sandbox Code Playgroud)

对于其他人,我们需要捕获ButtonClick并编写如下代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.DialogResult = true;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用MVVM,所以我只有Windows的XAML代码.但对于模态窗口我需要编写这样的代码,我不喜欢这样.在WPF中有更优雅的方式来做这些事情吗?

wpf modal-dialog

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

var_export 的替代品

var_export当参数具有循环引用时,函数会导致异常。是否有任何替代方案(除了serialize)可以正确处理它?

php

5
推荐指数
1
解决办法
1266
查看次数