小编Nan*_*nne的帖子

如何在屏幕中央布置图像的"网格"

我有一组12个图像在布局中显示.这个数字是半任意选择的,但是对于纵向模式可以归结为3个横向和4个垂直,而对于横向模式则相反.

第一个实现是使用gridview.问题是高度不能强制适合屏幕.对于一种解决方法,我可以(尝试)缩放课程图像,但几乎不可能计算出网格视图可用的空间:总屏幕尺寸是已知的,但你必须"猜测"通知栏的大小并且没有'似乎是一种优雅的溶剂.测量的大小实际上并不值得信任:我没有在方向更改(速度)上完全重新启动,但是屏幕的构建方式不能在现场获得完整的空间.最后得出的结论是,我不想计算图像的大小,然后相应地对它们进行缩放:我认为最好说出视图应该如何适应屏幕,对吧?

所以接下来的尝试就是使用TableLayout.使用"ShrinkColumns ="*"图像很合适,所以图像的大小现在是我们想要它们的大小.但是我们可能在高度上的'额外'空间现在在桌面之间均匀分配.这是可以预期的,但很难看

当前的代码似乎无关紧要,因为它不起作用,但最终看起来像这样:我已经删除了所有填充和其他看起来不相关的东西.(对于肖像:)

<TableLayout
       android:shrinkColumns="*">
    <TableRow>
        <ImageView/>
        <ImageView/>
        <ImageView/>
    </TableRow>
    … (repeat 3 tablerows)
</TableLayout>
Run Code Online (Sandbox Code Playgroud)

为了"缩放"过大的图像,TableLayout具有"shrinkcolumns ="*""属性.

我们怎样才能让三个ImageView在TableRow的中心对齐而不是在宽度上均匀分布?对于垂直列也是如此,我们如何将所有内容保持在一起而不是在屏幕的高度上展开?基本上,"多余"空间应该作为填充/边距到达边,现在它介于图像之间.

示例:左侧屏幕截图显示左/右距离太多,右侧有太多顶部/底部 例如-androblip布局图像

android gridview tablelayout android-layout

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

设置AlarmManager的最佳时刻/位置

我的应用程序显示了也有通知系统的站点的内容.我想显示是否有新的通知,我正在使用一个AlarmManager调用IntentService.

我的问题是:我应该在哪里开始/注册这个AlarmManager?我把它放在onCreate()我的活动中只是为了概念验证(它的工作正常,非常感谢:)),但是如果你要开始两次这样的活动,你会得到多个警报.

我提出的唯一可能的解决方案就是这个,但我不知道这是否是最好的做法

  • onCreate()如果首选项"alarm started"为false ,则启动管理器
  • 设置一些在首选项中启动的变量.

现在,如果由于某种原因警报停止,则无法重新启动它.所以,变化将是:

  • 始终在中取消取消 onCreate()
  • 然后始终设置警报.

这似乎是一种常见的模式:希望定期获取带有警报的信息,而不是将警报设置为一次.我该怎么做?何时,何地以及如何注册警报?

另外,继续@Zelimir的评论:你能检查一下是否已经设置了某个警报?

理想情况下,无论当前是否启动活动,都会设置警报,但这可能是另一回事.

为了完整性,这是我目前用于启动警报的代码:

AlarmManager alMan   = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i             = new Intent(this, CommentService.class);
PendingIntent penInt = PendingIntent.getService(this, 0, i, 0);

alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(), 
                          AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
                          penInt);
Run Code Online (Sandbox Code Playgroud)

为了更完整,应用程序描述/情况.
该应用程序基本上是从某个页面显示博客(如果你愿意的话).它有添加条目,查看条目,添加评论等的活动.在"母亲"网站上有一个接收通知的选项(例如,当您收到消息时,您在此处看到的号码也是如此).我想显示是否有新消息,因此每隔xx分钟检索一次.它现在会显示在通知栏中,但它可能会在以后提供某种小部件.

如果您需要更多信息:该应用程序名为Androblip,它支持名为blipfoto.com的网站

service android alarmmanager

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

获取PHPActiveRecord结果作为简单数组,而不是对象数组

我想有一个简单的方法,可以将PHP Activerecord结果作为简单/关联数组,而不是ActiveRecord对象数组.

在Ruby中,我相信这可能是通过.map()方法完成的.(我不是红宝石家伙...)

我想要的是一个简单的方法调用,比如toArray()在Zend_DB_Table中,不是foreach,或类似的东西,但我似乎无法在他们的文档中找到它.

在PHP ActiveRecord中获取结果非常简单:

$settings = SystemSettings::all();
Run Code Online (Sandbox Code Playgroud)

但它给出了这样的东西:

[0] => SystemSettings Object
    (
        [errors] => 
        [attributes:ActiveRecord\Model:private] => Array
            (
                [param] => author
                [value] => Hawle
            )

        [__dirty:ActiveRecord\Model:private] => Array
            (
            )

        [__readonly:ActiveRecord\Model:private] => 
        [__relationships:ActiveRecord\Model:private] => Array
            (
            )

        [__new_record:ActiveRecord\Model:private] => 
    )

[1] => SystemSettings Object
    (
        [errors] => 
        [attributes:ActiveRecord\Model:private] => Array
            (
                [param] => base_url
                [value] => example.com
            )

        [__dirty:ActiveRecord\Model:private] => Array
            (
            )

        [__readonly:ActiveRecord\Model:private] => 
        [__relationships:ActiveRecord\Model:private] => Array
            (
            )

        [__new_record:ActiveRecord\Model:private] …
Run Code Online (Sandbox Code Playgroud)

php zend-framework phpactiverecord

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

android:imeOption&imeActionLable不会改变键盘用Next输入标签

我一直试图解决这个问题,但没有成功.看起来很简单,但我不知道为什么android:imeOptions="actionNext" android:imeActionLabel="Next"在代码中跟随两个xml()标签不起作用.

<EditText android:id="@+id/stcnTxt" style="@style/DetailFormTextField" android:singleLine="true" android:imeOptions="actionNext" android:imeActionLabel="Next"> </EditText>
Run Code Online (Sandbox Code Playgroud)

根据上面的代码键盘输入键应该用Next Label替换它但是它仍然显示键盘上的回车键.我正在使用HTC野火输出.

android

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

覆盖函数不兼容

TL; DR

我想重写offsetSet($index,$value)ArrayObject这样的:offsetSet($index, MyClass $value)但它会产生一个致命错误("声明必须是兼容").

什么为什么

我正在尝试创建一个ArrayObject子类,强制所有值都是某个对象.我的计划是通过覆盖所有添加值并为其提供类型提示的函数来执行此操作,因此您无法添加除值之外的任何内容.MyClass

怎么样

第一站:append($value);
来自SPL:

/**
 * Appends the value
 * @link http://www.php.net/manual/en/arrayobject.append.php
 * @param value mixed <p>
 * The value being appended.
 * </p>
 * @return void 
 */
public function append ($value) {}
Run Code Online (Sandbox Code Playgroud)

我的版本:

/**
 * @param MyClass $value
 */
public function append(Myclass $value){
    parent::append($value);
}
Run Code Online (Sandbox Code Playgroud)

似乎像魅力一样工作.

你可以在这里找到这个工作的例子

第二站: offsetSet($index,$value);

再次,从SPL:

/**
 * Sets the value at the specified index to newval
 * @link …
Run Code Online (Sandbox Code Playgroud)

php overriding arrayobject

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

如何在容器中挂载文件,在首次运行之前不可用?

我正在尝试为使用基于文件的数据库的webapp构建Dockerfile.我希望能够从主机安装文件*该文件位于完整软件安装的根目录中,因此安装完整的目录并不是很理想.

另一个问题是在第一次使用之前,尚未创建数据库文件.第一次用户将没有数据库,但另一个用户可能没有.我不能在建造期间"装载"任何东西**我相信.

它可能会像这样工作:

  • 第一个/新数据库启动:
    • 启动容器(不安装).
    • webapp创建一个数据库.
    • 停止容器
  • 后续开始:
    • 使用a -v来装入文件来启动容器

如果用户不需要额外的启动/停止会更好.即使它是,我仍然在寻找一种方法来做这个用户友好,可能有2'方法'启动它(也许我可以在docker-compose和'普通'方法中定义第一启动的东西? ).

我怎么能以简单的方式做到这一点,以便任何第一次用户都清楚?

*原因是您可以将Dockerfile和数据库文件复制为备份,并且仅使用这两个元素启动并运行.

**如何在构建期间将主机卷装载到Dockerfile中的docker容器中

docker

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

我如何计算django中的几个关系

对于一个小项目,我有一个匹配和结果的注册表.每场比赛都在球队之间进行(可以是单人球队),并且有一个胜利者.所以,我有MatchTeam模型,通过加盟MatchTeam模式.这看起来像(简化)见下面的注释

class Team(models.Model):
    ...

class Match(models.Model):
    teams = ManyToManyField(Team, through='MatchTeam')
    ...

class MatchTeam(models.Model):
    match = models.ForeignKey(Match, related_name='matchteams',)
    team = models.ForeignKey(Team)
    winner = models.NullBooleanField()
    ...
Run Code Online (Sandbox Code Playgroud)

现在我想在比赛中做一些统计数据,从查找谁是最能打败你的人开始.我不完全确定如何做到这一点,至少,没有效率.

在SQL(这里只是近似),我的意思是这样的:

SELECT their_matchteam.id, COUNT(*) as cnt
FROM matchteam AS your_mt  
JOIN matchteam AS their_mt ON your_mt.match_id = their_mt.match_id
WHERE your.matchteam.id IN <<:your teams>> 
  your_matchteam.winner = false
GROUP BY their_matchteam.team_id
ORDER BY cnt DESC
Run Code Online (Sandbox Code Playgroud)

(这也需要一个"his_mt不是your_mt"子句btw,但这个概念很明确,对吧?)

虽然我没有将它作为SQL进行测试,但它只是为了深入了解我正在寻找的东西:我想通过Django聚合找到这个结果.

根据手册,我可以使用聚合注释结果,在本例中为a Count.我正在SQL中做的MatchTeams直接加入MatchTeams可能是一个捷径,因为它们Match之间应该存在一个?至少,我不知道如何将其翻译成Django

所以也许我需要为我的团队找到某些匹配项,然后用另一个团队的计数来注释它们?但是"另一支球队"是什么?

快速写入看起来像: …

python django aggregate

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

如何为 laravel 验证器的自定义存在规则添加连接?

laravel 中的验证器可以自定义现有数据库规则,例如,如果您需要检查额外的列。手册中的一个例子:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            $query->where('account_id', 1);
        }),
    ],
]);
Run Code Online (Sandbox Code Playgroud)

query在封闭不typehinted,所以我不是很积极,这是什么样的对象。我可以看到DatabaseRule本身只具有的一些功能wherewherenot等等,但我期待添加一个加入进来。

给定的例子说电子邮件必须存在于具有 的员工account_id = 1,但是如果团队(所有员工都是团队的一部分,这是一个单独的表)应该具有某个属性,例如team.active = 1
整个员工/团队的事情当然是一个例子


所以最后我想知道:我如何向这个规则添加一个连接,以便我们确保员工的团队有一个为 1 的“活动”列。

我的第一个问题可能是:那是什么类型的$query我想像这样的事情会很棒,但没有理由怀疑这是有效的:

Rule::exists('staff')->where(function ($query) {
    $query
        ->join('team', 'team.team_id', '=', 'staff.team_id')
        ->where('team.active', 1);
})
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用。奇怪的是join本身并没有报错,而是好像被忽略了:

未找到列:
1054 “where 子句”中的未知列“team.active”
(SQL:从staffwhere email= -thevalue- 和 ( team. active= 1) 中选择 count(*) …

join laravel illuminate-container laravel-5 laravel-validation

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

如何将分支动态部署为 digitalocean 应用程序?

使用简单的 gitlab-ci,我将 python 脚本部署到数字海洋。ci 文件中的脚本部分如下所示:

/app/doctl apps create --spec my-app.yml

Yaml 文件包含创建应用程序的信息,并且其中包含分支名称。我希望能够使其动态化,例如,如果我在某个分支上运行作业,则部署该分支。目前它总是部署 main,因为它是硬编码在配置中的:

配置的相关部分:

workers:
- environment_slug: python
  gitlab:
    branch: main
    repo: myname/appname
  name: app-name
  run_command: python runcommand.py
Run Code Online (Sandbox Code Playgroud)

我不确定是否可以将分支名称作为环境变量或其他变量?您可以在 yaml 本身中提供变量供以后使用,但据我所知,这并不是为了注入分支名称。

我犹豫是否要创建一个 yaml“模板”并编写一些内容来使用脚本或其他内容解析其中的分支名称,这感觉像是一个肮脏的解决方案?

我想到的另一个“解决方案”是将“主”作为“当前版本”分支,但实际上从不同的分支发布。“部署”分支。在大多数情况下,这相当于主分支,但您可以将一些测试代码推送到该分支。我不太喜欢这个,因为它会混淆该分支包含的内容,而且每次要推送不同的分支时编辑文件会花费更多的工作。

(上面的yaml是digital-ocean应用程序规范,请参阅:https://docs.digitalocean.com/products/app-platform/reference/app-spec/

deployment yaml digital-ocean gitlab-ci digital-ocean-apps

6
推荐指数
0
解决办法
488
查看次数

在Tumblr中创建主题的更好方法

我经常在tumblr中定制主题,但这个编辑器很糟糕.在Linux(Ubuntu)操作系统下,在tumblr中创建主题是否有更好的可能性?我正在考虑使用vim.但是我必须将文本复制到vim中,编辑一些东西并将其粘贴到tumblr web编辑器,这很不舒服.

tumblr

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