小编Tim*_*mmm的帖子

如何让Android TableLayout填满屏幕?

我正在与Android糟糕的布局系统作斗争.我正试图让桌子填满屏幕(简单吧?)但是这太难了.

我让它以某种方式在XML中工作,如下所示:

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

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent">
<TableRow android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<Button android:text="A" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/>
<Button android:text="B" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/>
</TableRow>
<TableRow android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<Button android:text="C" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/>
<Button android:text="D" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/>
</TableRow>
Run Code Online (Sandbox Code Playgroud)

但是我不能让它在Java中工作.我已经尝试过一百万种LayoutParams组合,但没有任何效果.这是我最好的结果,它只填充屏幕的宽度,而不是高度:

    table = new TableLayout(this);
    // Java. You suck.
    TableLayout.LayoutParams lp = new TableLayout.LayoutParams(
                                    ViewGroup.LayoutParams.FILL_PARENT,
                                    ViewGroup.LayoutParams.FILL_PARENT);
    table.setLayoutParams(lp); // This line has no effect! WHYYYY?!
    table.setStretchAllColumns(true);
    for (int r = 0; r < 2; ++r)
    {
        TableRow row = new TableRow(this);
        for …
Run Code Online (Sandbox Code Playgroud)

java xml layout android tablelayout

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

如何在一个箱子中公开一个Rust项目,但在它之外私有?

我有一个包含大量代码的包,所以我将它分成多个文件/模块.但是,有些模块有内部不安全的东西(例如原始指针),我需要向不同的模块公开,但我不想向我的箱子的用户公开.我怎样才能做到这一点?

我能想到的唯一方法就是让我的箱子只是一个大模块,但是除了这个似乎有点hacky的解决方案之外,没有办法将它分成不同的文件.

通常当我遇到一个现实世界的问题时,Rust文档中的简单示例没有充分解释我只是复制一个流行的真实世界的箱子,例如git2-rs,但这似乎只是有效地使一切都公开,包括原始指针.

module public rust rust-crates

28
推荐指数
1
解决办法
7063
查看次数

从QML访问C++ QLists

如果我在C++中有一个列表,我该如何将它暴露给QML(在Qt5/QtQuick 2中)?似乎QML只能理解 - QObject派生类,这是一个问题,因为QObjects不能放入QList或复制.我该怎么做呢:

struct Thing
{
    int size;
    QString name;
};

class ThingManager : public QObject
{
    Q_OBJECT

    // These macros support QtQuick, in case we one day want to use it to make a slick
    // interface (when QML desktop components are released).
    Q_PROPERTY(QList<Thing> things READ things NOTIFY thingssChanged)

public:
    // ...
    QList<Thing> things() const;

    // ...

};
Run Code Online (Sandbox Code Playgroud)

所以我可以在QML中做这样的事情:?

var a = thingManager.things[0].name;
Run Code Online (Sandbox Code Playgroud)

c++ qlist qml qt5 qtquick2

27
推荐指数
4
解决办法
3万
查看次数

在地图中存储带自定义删除器的unique_ptr

为什么这不起作用?

#include <map>
#include <memory>

void deleter(int* i) {
    delete i;
}

std::map<int, std::unique_ptr<int, decltype(&deleter)>> m;

void foo(int* i) {
    m[0] = std::unique_ptr<int, decltype(&deleter)>(i, &deleter);
}
Run Code Online (Sandbox Code Playgroud)

看看难以理解的编译错误https://godbolt.org/z/Uhp9NO.

In file included from <source>:1:
In file included from /opt/compiler-explorer/gcc-8.2.0/lib/gcc/x86_64-linux-gnu/8.2.0/../../../../include/c++/8.2.0/map:61:
In file included from /opt/compiler-explorer/gcc-8.2.0/lib/gcc/x86_64-linux-gnu/8.2.0/../../../../include/c++/8.2.0/bits/stl_map.h:63:
/opt/compiler-explorer/gcc-8.2.0/lib/gcc/x86_64-linux-gnu/8.2.0/../../../../include/c++/8.2.0/tuple:1668:9: error: no matching constructor for initialization of 'std::unique_ptr<int, void (*)(int *)>'
        second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
        ^
/opt/compiler-explorer/gcc-8.2.0/lib/gcc/x86_64-linux-gnu/8.2.0/../../../../include/c++/8.2.0/tuple:1655:9: note: in instantiation of function template specialization 'std::pair<const int, std::unique_ptr<int, void (*)(int *)> >::pair<int &&, 0>' requested here
      : pair(__first, __second, …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr

27
推荐指数
2
解决办法
1003
查看次数

返回通知创建活动的主要活动

我正在尝试实现此处描述的行为,其中通知(或其他)在您的应用中启动"内部"活动,然后当用户按下它时进入我的"主页"活动.

Android文档说

对于"后退"按钮,您应该通过在任务的后台堆栈中插入应用程序最顶层屏幕的完整向上导航路径,使导航更具可预测性.这允许忘记他们如何进入您的应用程序的用户在退出之前导航到应用程序的最顶层屏幕.

有没有一个好方法来实际做到这一点?关于Stackoverflow的其他问题建议启动主要活动,意图告诉它开始内部活动,但这似乎是一个巨大的黑客,我有点怀疑谷歌会在Gmail中使用,我认为有一个不错的方法,给定他们在倡导这种行为.

那么有一种非黑客的方法吗?

android

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

我怎样才能看到哪些唤醒锁是活跃的

出于某种原因,我的Android手机不会进入睡眠状态.我认为唤醒锁是保持清醒,但没有办法分辨哪些唤醒锁是活跃的.正在运行的服务没有列出任何可疑的东西,当然也没有什么不同.所以我的问题是:

  1. 当进程结束时,Android肯定会发布唤醒锁吗?有可能是一个应用程序写得不好而且在退出之前没有发布唤醒锁吗?

  2. 有没有办法看到活跃的唤醒锁?

这是dumpsys power显示:

$ dumpsys power
Power Manager State:
  mIsPowered=true mPowerState=0 mScreenOffTime=226093 ms
  mPartialCount=0
  mWakeLockState=
  mUserState=
  mPowerState=
  mLocks.gather=
  mNextTimeout=91922738 now=92136117 -213s from now
  mDimScreen=true mStayOnConditions=0
  mScreenOffReason=3 mUserState=0
  mBroadcastQueue={-1,-1,-1}
  mBroadcastWhy={0,0,0}
  mPokey=1 mPokeAwakeonSet=false
  mKeyboardVisible=false mUserActivityAllowed=false
  mKeylightDelay=6000 mDimDelay=47000 mScreenOffDelay=7000
  mPreventScreenOn=false  mScreenBrightnessOverride=-1  mButtonBrightnessOverride=-1
  mScreenOffTimeoutSetting=60000 mMaximumScreenOffTimeout=2147483647
  mLastScreenOnTime=0
  mBroadcastWakeLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
  mStayOnWhilePluggedInScreenDimLock=UnsynchronizedWakeLock(mFlags=0x6 mCount=0 mHeld=false)
  mStayOnWhilePluggedInPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
  mPreventScreenOnPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
  mProximityPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
  mProximityWakeLockCount=0
  mProximitySensorEnabled=false
  mProximitySensorActive=false
  mProximityPendingValue=-1
  mLastProximityEventTime=0
  mLightSensorEnabled=false
  mLightSensorValue=-1.0 mLightSensorPendingValue=-1.0
  mLightSensorScreenBrightness=35 mLightSensorButtonBrightness=255 mLightSensorKeyboardBrightness=0
  mUseSoftwareAutoBrightness=true
  mAutoBrightessEnabled=false
  mScreenBrightness: animating=false targetValue=-1 curValue=0.0 delta=-1.3333334

mLocks.size=0: …
Run Code Online (Sandbox Code Playgroud)

android process wakelock

25
推荐指数
5
解决办法
5万
查看次数

将 std::transform 与 std::back_inserter 一起使用是否有效?

Cppreference 有以下示例代码std::transform:

std::vector<std::size_t> ordinals;
std::transform(s.begin(), s.end(), std::back_inserter(ordinals),
               [](unsigned char c) -> std::size_t { return c; });
Run Code Online (Sandbox Code Playgroud)

但它也说:

std::transform不保证unary_op或的有序应用binary_op。要将函数按顺序应用于序列或应用修改序列元素的函数,请使用std::for_each。

这大概是为了允许并行实现。但是,的第三个参数std::transform是 a LegacyOutputIterator,它具有以下后置条件++r:

在此操作之后r不需要是可递增的,并且r不再需要可取消引用或可递增的先前值的任何副本。

所以在我看来,输出的分配必须按顺序进行。它们是否只是意味着应用程序unary_op可能会乱序,并存储到临时位置,但按顺序复制到输出?这听起来不像你想做的事情。

大多数 C++ 库还没有真正实现并行执行器,但微软已经实现了。我很确定这是相关的代码,我认为它调用这个populate()函数来将迭代器记录到输出的块中,这肯定不是一件有效的事情,因为 LegacyOutputIterator可以通过增加它的副本来失效。

我错过了什么?

c++ stl language-lawyer c++17

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

不能借用为不可变的因为它在函数参数中也被借用为可变的

这里发生了什么(游乐场)?

struct Number {
    num: i32
}

impl Number {
    fn set(&mut self, new_num: i32) {
        self.num = new_num;
    }
    fn get(&self) -> i32 {
        self.num
    }
}

fn main() {
    let mut n = Number{ num: 0 };
    n.set(n.get() + 1);
}
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

error[E0502]: cannot borrow `n` as immutable because it is also borrowed as mutable
  --> <anon>:17:11
   |
17 |     n.set(n.get() + 1);
   |     -     ^          - mutable borrow ends here
   |     |     |
   |     | …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

21
推荐指数
1
解决办法
3400
查看次数

javascript Arrays实际上是作为数组实现的吗?

javascript之间的区别Array,Object并不是很大.实际上它似乎Array主要添加了length字段,因此您可以将Arrays和Objects用作数字数组:

var ar = new Array();
ar[0] = "foo";
ar["bar"] = "foo";

var ob = new Object();
ob[0] = "foo";
ob["bar"] = "foo";

assert(ar[0] == ob[0] == ar["0"] == ob["0"] == ar.bar == ob.bar); // Should be true.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,在流行的JavaScript引擎(V8,JavaScriptCore,SpiderMonkey等)中,这是如何处理的?显然,我们不希望我们的数组实际存储为具有键值的哈希映射!我们怎样才能合理地确定我们的数据是否存储为实际数组?

据我所知,引擎可以采取一些方法:

  1. Array实现方式与Object- 使用字符串键的关联数组完全相同.
  2. Array是一个特殊情况,一个std::vector支持数字键的类似数组,以及一些密度启发式,以防止疯狂的内存使用ar[100000000] = 0;
  3. Array是相同的Object,并且所有对象都获得启发式,以查看使用数组是否更有意义.
  4. 我没有想到的东西非常复杂.

如果有一个合适的阵列类型(咳嗽 WebGL类型阵列咳嗽),这真的会更简单.

javascript arrays performance v8 spidermonkey

19
推荐指数
2
解决办法
4667
查看次数

在没有bindAppWidgetId()的情况下将窗口小部件添加到启动器页面

我正在尝试将库存ICS启动器变成一个独立的应用程序.我几乎就在那里 - 唯一不起作用的是搜索图标和将小部件放到屏幕上,这会导致崩溃.

崩溃是因为股票启动器appWidgetManager.bindAppWidgetId(appWidgetId, componentName);用来添加小部件,显然只有系统应用程序才有权这样做.

所以我的问题是,非系统应用程序添加小部件并获得与库存ICS启动器相同的UI体验的正确方法是什么?

android widget launcher android-4.0-ice-cream-sandwich

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