Я рекомендовал использовать этот скрипт, чтобы получить реальный размер.
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
print('_id: '+obj._id+' || Size: '+size+'B -> '+Math.round(size/(1024))+'KB -> '+Math.round(size/(1024*1024))+'MB (max 16MB)');
});
Примечание. Если ваши идентификаторы являются 64-битными целыми числами, вышесказанное усечет значение идентификатора при печати! Если это так, вы можете использовать вместо этого:
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
var stats =
{
'_id': obj._id,
'bytes': size,
'KB': Math.round(size/(1024)),
'MB': Math.round(size/(1024*1024))
};
print(stats);
});
Это также имеет преимущество возврата JSON, поэтому графический интерфейс, подобный RoboMongo, может его табулировать!
source: https://stackoverflow.com/a/16957505/3933634
edit: благодаря @zAlbee для вашего предложения.
Отличные ответы Люка и Марка, однако хороший образец кода отсутствует. Добавление тега android: focusableInTouchMode = "true"
в
, как в следующем примере, устранит проблему.
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:nextFocusUp="@id/autotext"
android:nextFocusLeft="@id/autotext"/>
Попробуйте clearFocus () вместо setSelected (false)
. Каждое представление в Android имеет как фокусировку, так и возможность выбора, и я думаю, что вам нужно просто убрать фокус.
Единственное решение, которое я нашел:
android: focusable = "true"
и android: focusableInTouchMode = "true"
И EditText
не получит фокус после запуска действия
Да, я сделал то же самое - создал «фиктивный» линейный макет, который получает начальный фокус. Кроме того, я установил идентификаторы «следующего» фокуса, чтобы пользователь больше не мог сфокусировать его после прокрутки один раз:
<LinearLayout 'dummy'>
<EditText et>
dummy.setNextFocusDownId(et.getId());
dummy.setNextFocusUpId(et.getId());
et.setNextFocusUpId(et.getId());
много работы, чтобы просто избавиться от фокуса на представлении ..
Спасибо
Действительно ли проблема в том, что вы просто не хотите, чтобы она вообще фокусировалась? Или вы не хотите, чтобы виртуальная клавиатура отображалась в результате фокусировки EditText
? Я действительно не вижу проблемы с EditText
, имеющим фокус при запуске, но это определенно проблема, когда окно softInput открыто, когда пользователь явно не запрашивал фокусировку на EditText
] (и в результате откроем клавиатуру).
Если проблема связана с виртуальной клавиатурой, см. Документацию AndroidManifest.xml
android: windowSoftInputMode = "stateHidden"
- всегда скрывать при входе в активность.
или android: windowSoftInputMode = "stateUnchanged"
- не меняйте его (например, не показывать его, если он еще не отображается, но если он был открыт, когда входя в действие, оставьте его открытым).
Я очищаю весь фокус с кнопка отправки
// xml file
<LinearLayout
...
android:id="@+id/linear_layout"
android:focusableInTouchMode="true"> // 1. make this focusableInTouchMode...
</LinearLayout>
// Activity file
private LinearLayout mLinearLayout; // 2. parent layout element
private Button mButton;
mLinearLayout = findViewById(R.id.linear_layout);
mButton = findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mLinearLayout.requestFocus(); // 3. request focus
}
});
, я надеюсь, что это помогает Вам:)
Простое и надежное решение, просто переопределите этот метод:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
View v = getCurrentFocus();
if (v != null &&
(ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) &&
v instanceof EditText &&
!v.getClass().getName().startsWith("android.webkit.")) {
int scrcoords[] = new int[2];
v.getLocationOnScreen(scrcoords);
float x = ev.getRawX() + v.getLeft() - scrcoords[0];
float y = ev.getRawY() + v.getTop() - scrcoords[1];
if (x < v.getLeft() || x > v.getRight() || y < v.getTop() || y > v.getBottom())
hideKeyboard(this);
}
return super.dispatchTouchEvent(ev);
}
public static void hideKeyboard(Activity activity) {
if (activity != null && activity.getWindow() != null && activity.getWindow().getDecorView() != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);
}
}